Inteiros sem sinal têm uma representação
computacional (em números binários) equivalente à representação usual
para números decimais, ou seja, através da atribuição de pesos
associados à posição de cada bit. Grande parte dos computadores
atuais utilizam 32 bits para representar números inteiros, o que
permite representar
valores distintos. (A geração
mais recente de computadores suporta também inteiros com 64 bits.)
Uma seqüência binária
A representação de inteiros com sinal pode usar outros formatos. A forma
mais básica é a representação em sinal e magnitude, onde o bit mais
significativo denota o sinal associado ao restante da seqüência (
indicaria que o número é negativo). Este formato tem a desvantagem
de ter duas representações diferentes para o valor zero, além de ter
circuitos complicados para suportar operações básicas, diferenciando
adição de subtração, por exemplo.
Outra formato suportado para representar inteiros com sinal é a representação em complemento de um. A representação para um número negativo neste formato pode ser obtida facilmente a partir da representação do número positivo correspondente simplesmente complementando cada bit da seqüência, ou seja, trocando 0's por 1's e 1's por 0's. Apesar de simplificar circuitos para operações básicas, este formato ainda mantém duas representações distintas para o valor zero.
O formato mais aceito para inteiros com sinal é a representação em
complemento de dois. Para obter a representação de um número negativo
neste formato, computa-se inicialmente a representação em complemento
de um e adiciona-se 1 ao bit menos significativo. Neste caso, o valor
inteiro associado à seqüência
é
Este formato mantém a simplicidade dos circuitos aritméticos e tem apenas uma representação para o valor zero. Uma característica que lhe é peculiar é o fato de que a faixa de valores representáveis não é simétrica em torno de 0, havendo um valor negativo a mais que a quantidade de valores positivos distintos. Por exemplo, seqüências de cinco bits podem representar valores entre -16 (10000) e +15 (01111).
No formato de representação para números reais, associado ao
conceito de notação científica, cada valor (pertencente ao domínio dos
reais) é representado por um sinal, uma mantissa e um expoente. Entre
as inúmeras combinações possíveis de formatos de representação que
seguem esta filosofia básica, o padrão IEEE-754 tem sido o mais aceito
e usualmente suportado em hardware (através das unidades de ponto
flutuante em co-processadores ou incorporados a CPUs). Este formato
suporta representações de números reais em precisão simples (32
bits, dos quais 8 para a representação do expoente e 23 para a
representação da mantissa), em precisão dupla (64 bits, sendo
11 para o expoente e 53 para a mantissa) e em precisão estendida (80
bits). Há também representações especiais para os valores
,
e NaN (Not a Number, associado
ao resultado de operações sem significado matemático, tal como a
divisão de zero por zero).
Parece evidente que a representação binária, apesar de ideal para o processador, é de difícil manipulação por humanos. Por este motivo, adota-se usualmente a representação hexadecimal para denotar seqüências binárias.
A vantagem da representação hexadecimal sobre a decimal, que usamos no dia a dia, é a fácil associação com seqüências binárias. A tradução é direta: cada seqüência de quatro bits corresponde a um símbolo hexadecimal. A tabela a seguir define este mapeamento:
binário | hexa | binário | hexa |
---|---|---|---|
0000 | 0 | 1000 | 8 |
0001 | 1 | 1001 | 9 |
0010 | 2 | 1010 | A |
0011 | 3 | 1011 | B |
0100 | 4 | 1100 | C |
0101 | 5 | 1101 | D |
0110 | 6 | 1110 | E |
0111 | 7 | 1111 | F |
A representação octal também permite um mapeamento similar, de três bits para um dígito entre 0 e 7. Entretanto, a representação hexadecimal também apresenta a vantagem de alinhamento com um byte (8 bits, dois dígitos hexadecimais) e palavras de 16 bits (quatro dígitos).