Subsecções

Representação de números com um número fixo de dígitos

Num computador cada inteiro é representado por um número fixo de bits. Em 8 bits, 13 seria representado por 00001101. Isto é, introduzem-se 0 à esquerda sempre que o número de bits da representação do inteiro seja menor que o número fixo de bits. Se tal número for n, os bits são designados da direita para a esquerda por bit0, bit1, ..., bitn-1. O bitn-1 diz-se o bit mais significativo.

Por outro lado, ao fixar-se o número de bits da representação limita-se os valores que podem ser representados.

Se o número de bits for 8 o maior inteiro positivo que se pode representar é:
1 1 1 1 1 1 1 1
bit  7 bit  6 bit  5 bit  4 bit  3 bit  2 bit  1 bit  0

cujo valor é

27 x 1 + 26 x 1 + 25 x 1 + 24 x 1 + 23 x 1 + 22 x 1 + 21 x 1 + 20 x 1 = 255(= 28 - 1)

Em geral, com n bits podemos representar números inteiros positivos de 0 a 2n - 1.

Teorema 2   O maior inteiro positivo que se pode representar na base b com n dígitos é bn - 1.

Dem.
Suponhamos que A é representado com n dígitos na base b por an-1an-2...a1a0 com ai 19#19 {0,..., b - 1}. Então,

A = an-1bn-1 + an-2bn-2...a1b1 + a0b0 = 25#25aibi

Ora,
25#25aibi 5#5 25#25(b-1)bi  
  = (b - 1)25#25bi  
  = (b - 1)26#26  
  = (b - 1)27#27  
  = bn - 1  

10#10

Exercício 16  
(egintex2html_deferredindtex2html_deferred).
Qual é o número mínimo de bits necessário para representar 1125?
(egintex2html_deferrediindtex2html_deferred).
Qual o valor máximo que pode ser representado com esse número de bits?

Normalmente o número de bits usados são 8, 16, 32 ou 64. Com 8 bits podemos representar inteiros entre 0 e 255, com 16 bits entre 0 e 65535, com 32 bits entre 0 a 4294967295, etc.

Representação de números negativos

Para representar números inteiros positivos e negativos numa base b e com um número fixo n de dígitos é necessário codificar o sinal e encontrar um processo eficiente de determinar se um número é positivo ou negativo. Normalmente é reservado um dígito para indicar o sinal. Por exemplo, sendo A = an-1an-2...a1a0(b), se an-1 = 0 então A é positivo, se an-1 = b - 1 o número é negativo.

Vamos considerar duas maneiras habituais de representar números inteiros positivos e negativos e que obedecem à condição de sinal apresentada. Vamos supor que a base é a 2 e que o número de dígitos é n, mas os resultados podem ser generalizados para qualquer base b.

Representação com sinal

Reserva-se o bit mais à esquerda para o sinal e os restantes para o módulo do número.

28#28

O bit de sinal é 0 para os positivos e é 1 para os negativos. Assim, um número positivo é da forma A = 0an-2...a1a0 e um negativo A = 1an-2...a1a0. Com n bits podemos representar números positivos de 0 a 2n-1 - 1 e negativos de - (2n-1 - 1) a 0.

As representações de dois números com o mesmo módulo diferem apenas no bit de sinal. Se n = 3 temos o seguinte quadro:

Valor Representação com sinal
0 000
1 001
2 010
3 011
-0 100
-1 101
-2 110
-3 111

Um problema deste método é que o zero tem duas representações: +0 e -0. Mais importante, ainda é que para fazer adições de números de sinal diferente é necessário primeiro determinar qual é o maior e qual o sinal do resultado. O mesmo problema surge para a subtracção, que pode ser tratada como a adição associando o sinal negativo ao subtraendo, x - y = x + (- y).

Complemento para 2

Neste método pretende-se que metade dos números representados sejam não negativos e a outra metade corresponda a números negativos. De 0 a 2n-1 - 1 tem-se números não negativos e de 2n-1 a 2n - 1 números negativos. Para os positivos a representação coincide com a representação anterior. Os números negativos são complementos para a base. Por definição, o complemento para 2 de x numa representação de n bits é o inteiro 2n - x.

Se n = 3 então -1 é representado por 111 pois 23 - 1 = 7.

Em resumo, temos o seguinte quadro para n = 3:

Valor Complemento para 2
0 000
1 001
2 010
3 011
-4 100
-3 101
-2 110
-1 111

Usando a definição de complemento para 2, pode-se concluir que 2n-1 representa -2n-1 e 2n - 1 representa -1.

No sistema de representação com n bits e complemento para 2 os valores possíveis dos inteiros representáveis variam de -2n-1 a 2n-1 - 1. Note que os números negativos estão ``ordenados'' por ordem decrescente do seu valor absoluto, isto é, 129#29 representa o negativo com maior valor absoluto (-2n-1) e 30#30 representa o número negativo com menor valor absoluto (-1).

Na tabela seguinte compara-se o significado de sequências de n-bits para as três representações de inteiros (com n-bits) apresentadas.

  00...0 01...1 10...0 10...01 11...1
Sem sinal 0 2n-1 - 1 2n-1 2n-1 + 1 2n - 1
Com sinal 0 2n-1 - 1 0 -1 - (2n-1 - 1)
Complemento para 2 0 2n-1 - 1 -2n-1 - (2n-1 - 1) -1

Para além de só haver um zero, neste caso todos os negativos tem 1 como bit mais significativo, que também funciona como bit de sinal. Outra vantagem deste método é que as adições podem ser feitas sem analisar o sinal dos operandos e nas subtracções basta calcular o complemento para 2 do subtraendo e adicionar o valor resultante ao subtractivo.

Exercício 17   Quais os inteiros que podem ser representados num sistema de complemento para 2 em 8, 16, e 32 bits?

Como  2n - x = (2n -1 - x) + 1     e    2n -1 - x   pode ser obtido complementando todos os dígitos de x (isto é trocando os uns com os zeros e os zeros com os uns, uma vez que 2n -1 = (30#30), pode-se usar a seguinte regra prática para calcular o complemento para 2 de um inteiro positivo x:

toma-se a representação em binário de x com n bits; troca-se nessa representação cada 1 em 0 e cada 0 em 1 e adiciona-se ao resultado 1

Por exemplo, para representar o inteiro -3 em 8 bits e complemento para 2, toma-se 00000011 (binário 3); efectua-se a troca indicada obtendo-se 11111100 e soma-se 1 resultando 11111101.

Exercício 18  
  1. Qual a representação em 8-bits e complemento para 2 dos números -120 e -1 ?

  2. Determine a representação 8-bits e complemento para 2 dos números 01100110, 10001000 e 11111111.

Para obter o valor decimal basta considerar que a parcela an-12n-1 é negativa. Por exemplo,

110(2) = 1 x (- 22) + 1 x 21 +0 x 20 = - 4 + 2 + 0 = - 2(10)

Exercício 19   Quais os inteiros representados em 8-bits e complemento para 2 por F2(h), 4F(h), A3(h), 10010000, 00000000, 10000000, 7F(h)?

Exercício 20   Represente em complemento para 2 e com 8 bits os números inteiros seguintes 25, -25, 41, 56, 19, -31, e -87.

Exercício 21   Suponha que a representação em complemento para dois com 4 dígitos de um inteiro é 1101. Como é a representação com:
(egintex2html_deferredindtex2html_deferred).
6 dígitos
(egintex2html_deferrediindtex2html_deferred).
8 dígitos
(egintex2html_deferrediiindtex2html_deferred).
n dígitos, com n 8#8 4.

Exercício 22   Suponha agora que, em 4 dígitos, a representação em complemento para dois é 0101. Como responderia às alíneas anteriores? Em geral, dado um inteiro x representado em n dígitos como procederia para obter a sua representação com mais dígitos?

Nelma Moreira 2008-05-23