Representação dos números inteiros e reais

Março 2017

Representação de um número num computador

Chama-se representação ou codificação de um número, a maneira como ele é descrito sob forma binária. A representação dos números num computador é indispensável para que este o possa armazená-los e manipulá-los. Contudo, o problema é que um número matemático pode ser infinito (tão grande quanto quisermos), mas a sua representação em um computador deve ser feita num número de bits predefinido. Logo, é preciso predefinir um número de bits e a maneira de utilizá-los para que eles sejam usados, o mais eficazmente possível, para representar a entidade. Assim, seria bobagem codificar um caractere em 16 bits (65536 possibilidades) quando, geralmente, utilizamos menos de 256.

Representação de um inteiro natural

Um número inteiro natural é um inteiro positivo ou nulo. A escolha a ser feita (isto é, o número de bits a serem utilizados) depende do intervalo de números que se quer usar. Para codificar números inteiros naturais compreendidos entre 0 e 255, serão suficientes 8 bits (um byte) porque 28 =256. De um modo geral, uma codificação em n bits poderia representar números inteiros naturais compreendidos entre 0 e 2n-1.

Para representar um número inteiro natural após ter definido o número de bits no qual o codificamos, basta arrumar cada bit na célula binária correspondente ao seu peso binário da direita para a esquerda e, em seguida, "preencher" os bits não utilizados com zeros.

Representação de um inteiro relativo

Um inteiro relativo é um número inteiro que pode ser negativo. Assim sendo, é preciso codificar o número de modo a que se possa saber se se trata de um número positivo ou negativo, e é preciso, também, que as regras de adição sejam conservadas. O truque consiste em utilizar uma codificação que se chama complemento a dois.

Um inteiro relativo positivo ou nulo será representado em binária (base 2) como um inteiro natural, com a única diferença que o bit de peso forte (o bit situado à extrema esquerda) representa o sinal. Por conseguinte, é preciso verificar se, para um inteiro positivo ou nulo que ele esteja em zero (o 0 corresponde a um sinal positivo e 1 a um sinal negativo). Assim, se codificarmos um inteiro natural em 4 bits, o maior número será 0111 (ou seja, 7 em base decimal). Normalmente, o maior inteiro relativo positivo codificado em n bits será 2n-1-1.

Um inteiro relativo negativo graças à codificação em complemento a dois.
Princípio do complemento a dois: para representar um número negativo, tome o seu oposto (o seu equivalente em positivo), represente-o em base 2 sobre n-1 bits, complemente cada bit (inverta, ou seja, substitua os zeros por 1 e vice-versa) e adicione 1. Vamos observar que acrescentando o número e o seu complemento a dois obteremos 0.

Exemplo:

Para codificar o valor -5 em 8 bits, basta escrever 5 em binário: 00000101, complementar ao 1: 11111010, acrescentar ao 1: 11111011. A representação binária de -5 em 8 bits é 11111011.

Observações: o bit de peso forte é 1, por isso obtemos um número negativo. Ao acrescentarmos 5 e -5 (00000101 e 11111011) obteremos 0 (com a retenção de 1).

Representação de um número real

Trata-se de representar um número binário com vírgula (por exemplo, 101,01 que não se lê ‘cento e um vírgula zero um’ dado que é um número binário mais 5,25 em decimal) sob a forma 1,XXXXX... * 2n (no nosso exemplo 1,0101*22). A norma IEEE define a maneira de codificar um número real. Esta norma propõe codificar o número em 32 bits e define três componentes: o sinal é representado por um só bit, ou seja, pelo bit de peso forte (o mais à esquerda), o expoente é codificado utilizando 8 bits consecutivos ao sinal e a mantissa (os bits situados após a vírgula) com os 23 bits restantes.

Assim, a codificação faz-se sob esta forma:

seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm
O s representa o bit relativo ao sinal
Cada e representa o expoente do bit
Cada m representa a mantissa do bit

Porém, há certas restrições para os expoentes:

O expoente 00000000 é proibido
O expoente 11111111 é proibido, contudo, ele é utilizado para assinalar erros. Esta configuração numérica é chamada de NaN, que significa Not a number (Não é um número)
É necessário adicionar 127 (01111111) ao expoente para uma conversão de decimal para um número real binário. Os expoentes podem assim ir de -254 à 255

Assim, a fórmula de expressão dos números reais é
(-1)^S * 2^(E - 127) * (1 + F)
onde:

S é o bit do sinal y e, por isso o 0 é entendido como positivo (-1^0=1).
E é o expoente ao qual se deve adicionar 127 para obter o seu equivalente codificado.
F é a parte fraccionária, a única que se expressa e que é adicionada a 1 para efetuar o cálculo.

Exemplo: Codificar o valor 525,5.

525,5 é positivo, logo o primeiro bit será 0.
A sua representação num sistema binário (base 2) é 1000001101,1
Ao padronizá-lo, encontramos 1,0000011011*2^9
Acrescentamos 127 ao expoente que vale 9, o que dá 136, ou seja, no sistema binário (base 2): 10001000
A mantissa é composta pela parte decimal de 525,5 em base 2 normalizada, quer dizer 0000011011
Como a mantissa deve ocupar 23 bits, é necessário acrescentar zeros para a completa-la:
00000110110000000000000
Consequentemente, a representação do número 525,5 binário com a norma IEEE é:
0 1000 1000 00000110110000000000000
0100 0100 0000 0011 0110 0000 0000 0000 (4403600 em sistema hexadecimal)

Exemplo com um número real negativo: Codificar o valor -0,625.

O bit s vale 1 porque 0,625 é negativo
0,625 se escreve no sistema binário (base 2) assim: 0,101
Desejamos escrevê-lo assim: 1.01 x 2-1
Por conseguinte, o expoente vale 1111110 porque 127 - 1 = 126 (quer dizer 1111110 em binário)
A mantissa é 01000000000000000000000 (só os números após a vírgula são representados, já que o número inteiro é sempre igual a 1)
A representação binária do número 0,625 com a norma IEEE 754 é:
1 1111 1110 01000000000000000000000
1111 1111 0010 0000 0000 0000 0000 0000 (FF 20 00 00 em sistema hexadecimal)

Veja também


Representation of real numbers and integers
Representation of real numbers and integers
Representación de números reales y números enteros
Representación de números reales y números enteros
Darstellung von ganzen und reellen Zahlen
Darstellung von ganzen und reellen Zahlen
Représentation des nombres entiers et réels
Représentation des nombres entiers et réels
Rappresentazione dei numeri interi e reali
Rappresentazione dei numeri interi e reali
Este documento, intitulado 'Representação dos números inteiros e reais', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.