Introdução aos números inteiros
Nesta seção examinaremos a representação de números inteiros no computador.
1. Sequência de bits (e bytes) para representar um inteiro
Toda informação no computador digital é composta por bits, em particular todo símbolo ou caractere é representado por um número fixo de bits, sendo que geralmente usa-se uma quantidade fixa de bits para representar qualquer caractere.
Por outro lado, podemos interpretar qualquer sequência de bits por seu correspondente em decimal usando a notação de valor posicional considerando a base b=2.
Assim, considerando um binário qualquer com oito (8) bits, ou seja, b7b6b5b4b3b2b1b0, para cada i entre 0 e 7, bi=0 ou bi=1. Desse modo, para computar o valor numérico desse binário com 8 bits, em seu correspondente decimal, devemos calcular o valor do polinômio b7*27+b6*26+b5*25+b4*24+b3*23+b2*22+b1*21+b0*20.
Por exemplo, o binário 00000111 corresponde ao decimal 0*27+0*26+0*25+0*24+0*23+1*22+1*21+1*20 = 4+2+1 = 7 (última linha da tabela 1).
Número binário | decimal correspondente |
---|---|
00000000 | 0 | 00000001 | 1 | 00000010 | 2 | 00000011 | 3 | 00000100 | 4 | 00000101 | 5 | 00000110 | 6 | 00000111 | 7 |
Um dos primeiros padrões para codificar caracteres foi o padrão
2. Quantos inteiros conseguimos com 8 bits
Assim, o número de bits utilizados para representar os inteiros define o intervalo de inteiro que podemos conseguir. Por exemplo, se dispomos de 8 bits, que é denominado um bytes, podemos conseguir até 28 diferentes valores, pois podemos usar desde 00000000 até o binário 11111111.
Portanto, se o computador tivesse apenas 8 bits para representar inteiros positivos, poderíamos ter desde o 00000000 (correspondendo ao decimal 0) até o binário 11111111, que correspondente ao decimal 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 = 1+2+4+8+16+32+64+128 = 256-1 = 255.
Mas se precisarmos dos inteiros negativos, poderíamos usar o primeiro bit para o sinal (1 indicando negativo) ou fazer o complemento binário ("invertendo" os bits). No primeiro caso, com os mesmos 8 bits, poderíamos ir desde -127 (-26-25-...-21-20) até 127, mas perderíamos uma entrada (tanto 10000000, quanto 00000000 poderiam ser associadas ao 0). Essa associação, que não é utilizada na prática, está ilustrada na terceira coluna da tabela 2.
A outra opção, denominada complemento de dois, podemos variar de -128 até 127, como indicado na segunda coluna da tabela 2. Nessa representação para obter o negativo de um número deve-se aplicar dois passos:
01111111 |
+ |
10000000 |
-------- |
11111111 |
Na tabela 2 apresentamos os binários entre 00000000 e 11111111, mostrando seu correspondente decimal usando a técnica de complemento de dois (coluna do meio) e a conversão usual para decimal (coluna da direita). Lembrando citação anterior, para converter um valor em base binária para base decimal basta considerar o valor posicional do bit (dígito) multiplicado por sua potência. Assim, o primeiro binário 00000000 é 0, pois computando seu valor pela fórmula para números com valor posicional, 00000000 corresponde ao zero multiplicado por todas suas potência, ou seja, 0 x 2k para todo natural k. Por outro lado, o binário 00010011 é 19, pois corresponde à 1 x 24 + 1 x 21 + 1 x 20 = 16 + 2 + 1 = 19.
Número binário | decimal com sinal (complemento) | decimal sem sinal |
---|---|---|
00000000 | 0 | 0 | 00000001 | 1 | 1 | 00000010 | 2 | 2 | 00000011 | 3 | 3 | 00000100 | 4 | 4 | 00000101 | 5 | 5 | ... | ... | ... | 01111110 | 126 | 126 | 01111111 | 127 | 127 | 10000000 | -128 | 128 | 10000001 | -127 | 129 | 10000010 | -126 | 130 | 10000011 | -125 | 131 | ... | ... | ... | 11111101 | -3 | 253 | 11111110 | -2 | 254 | 11111111 | -1 | 255 |
3. Inteiros com dois bytes (ou 16 bits)
Como citado anteriormente, um computador que tivesse apenas 8 bits (que equivale a um byte) permitiria a existência de apenas 256 caracteres distintos (incluindo dígitos, letras e caracteres especiais). Em lingua inglesa isso poderia ser suficiente, mas em Português (e outras), devido aos acentos, 256 possibilidades não é o suficiente. Assim, se for usado o dobro de bits, passando a usar 16 bits (ou dois bytes), o número de símbolos possíveis crescem muito: com 16 bits é possível representar 216=65536 símbolos distintos, que restrito aos valores naturais possibilita desde o 0 até o 65535. Considerando inteiros negativos, usando a representação com complemento de dois, conseguimos representar desde o -32768 até o 32767.
Uma vez que o ASCII mostrou-se muito restritivo, surgiram vários outros padrões, como o ISO-8859-1 e o padrão atual dominante UTF-8 que permite codificar símbolos em qualquer das linguas correntes. Entretanto, tanto o ISO-8859-1 quanto o UTF-8 tem como códigos iniciais os mesmos 128 primeiros do ASCII (portanto, em ambos a letra 'A' continua com o código 65).
Leônidas de Oliveira Brandão
http://line.ime.usp.br