Representação de numero inteiros usando linguagem C
Por: Jonathas Cavalcante • 12/7/2015 • Trabalho acadêmico • 2.000 Palavras (8 Páginas) • 902 Visualizações
Universidade Federal do Amazonas (Ufam)
Instituto de Computação (Icomp)
Ciência da Computação – Bacharelado
Disciplina: Sistemas Lógicos
Prof. Leandro Galvão
Representação de Números Inteiros
Usando Linguagem C
Luiz Gonzaga da Mota Ferreira Júnior
lgmfj@icomp.ufam.edu.br
Marcos Filipe Ferreira de Oliveira
mffo@icomp.ufam.edu.br
Manaus – AM
2013
1. Introdução
Neste trabalho apresentaremos os resultados e explicações de vários casos testes, em atividades laboratoriais, de representação de números inteiros usando a linguagem C.
O objetivo dessas atividades é a execução e compilação do nosso primeiro programa em C, compreendendo as funções básicas de entrada e saída da linguagem. E compreender a notação complemento de 2 para a representação de números inteiros.
2. Atividades
Atividade 1: Entrada e Saída de Dados Formatados em um Programa em C.
Tabela 01 – Entrada e saída de dados
Execução | Leitura (a) | Leitura (b) | Impressão (a) | Impressão (b) |
1 | 1 | 1 | 1 | 1 |
2 | -1 | -1 | -1 | 4294967295 |
3 | 2147483648 | 2147483648 | -2147483648 | 2147483648 |
4 | 4294967296 | 4294967296 | 0 | 0 |
1. Em memória de máquina os números são representados em forma de conjuntos de bits {0,1}. Na declaração da variável a como sendo do tipo int (inteiro sinalizado) estamos dizendo que a sua faixa de valores vai de -2147483648 (-231) até 2147483647 (231 - 1). Já na declaração da variável b como sendo do tipo unsigned (inteiro não sinalizado), sua faixa de valores vai de 0 (zero) até 4294967295 (232 - 1).
Como os números são guardados na memória no formato binário, a leitura de uma variável, seja usando a string de controle %d ou %u, não altera o seu valor binário. O que muda é a forma de interpretar os seus bits. Na impressão a string %d irá tratar o número com sendo sinalizado (complemento de 2) e a string %u como sendo não sinalizado (binário puro).
Vejamos um exemplo simples com a representação de números decimais usando apenas 3 bits na Tabela 02:
Tabela 02 – Forma de interpretação dos dados
Entrada (decimal) | Valor na memória | Saída A (sinalizada) | Saída B (não sinalizada) |
-2 | 110 | -2 | 6 |
-1 | 111 | -1 | 7 |
0 | 000 | 0 | 0 |
1 | 001 | 1 | 1 |
2 | 010 | 2 | 2 |
3 | 011 | 3 | 3 |
4 | 100 | -4 | 4 |
5 | 101 | -3 | 5 |
6 | 110 | -2 | 6 |
7 | 111 | -1 | 7 |
8 | 000 | 0 | 0 |
Imaginemos agora a Tabela 02 como sendo cíclica, na entrada do número decimal 1 será armazenado na memória o binário 001, que nas duas saídas terá a mesma interpretação. Na entrada do decimal -1 será armazenado na memória o binário 111, que na saída A será interpretado como -1, mas na saída B será interpretado como 7. Na entrada do decimal 4 será armazenado na memória o binário 100 que na saída A teremos -4, pois 4 está fora da faixa de valores representáveis desta saída, e na saída B teremos o 4. E quando na entrada temos o decimal 8 será armazenado o binário 000 que nas duas saídas terá o 0 como resultado, pois o 8 está fora das suas faixas de representatividade.
Desta forma a explicação exposta para a Tabela 02 é a mesma que ocorre para as quatro execuções da Tabela 01.
OBS: uma coisa a ser notada nos nossos experimentos foi a forma de interpretação dos valores do tipo unsigned no Linux. Quando fazíamos a leitura via teclado com números superiores ao que a variável suporta, ao invés de iniciar o ciclo novamente, a saída era a subtração do valor máximo da variável com o valor que era pra ser a saída esperada.
Testamos no Dev – C com o sistema Windows e deu certo. Voltamos a fazer o teste com o Linux novamente, mas com o valor sendo atribuído diretamente no código fonte e deu certo. Em fim, essa nota é apenas uma observação feita nos nossos experimentos para a atividade1 e não sabemos o motivo desse comportamento estranho de resposta.
Atividade 2: Impressão de Inteiros no Formato Hexadecimal.
a) A string de controle %d mostra o número no seu formato decimal e %X no seu formato hexadecimal com letras maiúsculas.
...