Introdução à programação e aos algoritmos
1.5.4 Complemento a 2
Como na representação com bit de sinal, números iniciados com 0, ou seja, números cujo bit mais à esquerda é 0, são números positivos e aqueles iniciados com 1 são negativos. Os números positivos são convertidos diretamente de decimal para binário e os números negativos são representados pelo complemento a 2 do número equivalente positivo.
O complemento a 2 de um número binário com n bits é definido
como o complemento com respeito a 2n, ou seja, o resultado da subtração desse número de 2n. Você pode pensar no complemento a dois de um número como o quanto falta para completar 2n. Vejamos um exemplo para ilustrar esse conceito.
Se você quiser converter o número –10 em seu complemento a 10
dois usando 8 bits, você terá de pensar em quanto falta de 1010 (seu valor absoluto) para atingir 2n. A conta é fácil na base decimal: 28 – 10 ⇒ 256 – 10 = 246. Isso quer dizer que 246 é a representação em complemento a 2 de –10. Lembre-se de que, na nossa representação em complemento a 2, o maior inteiro com 8 bits é +127.
Transformando tudo em binário 10 = 00001010 e –10 = 10 2 10
11110110 2. Converta 246 em binário para conferir este resultado.
Mas, é óbvio, esse processo é muito trabalhoso para encontrar a
representação em complemento a 2 de um número negativo. Existe uma maneira mais fácil que pode ser implementada facilmente com circuitos eletrônicos. A receita é a seguinte: troque cada bit 1 por 0 e cada 0 por 1 no número binário original. Em seguida some 1 ao resultado.
Vejamos um exemplo: queremos obter a representação em
complemento a 2 de –10 , usando uma representação com 8 bits. 10
Primeiro convertemos 10 para binário ⇒ 0000 1010 10
Invertemos os bits ⇒ 1111 0101 Somamos 1 ⇒ +1
Obtemos –10 em complemento a 2 ⇒ 1111 0110
Essa representação tem uma vantagem adicional: podemos fazer a subtração somando! Assim, como exemplo, vamos fazer a conta 15 – 10.
Em binário 15 = 0000 1111 . Vamos somar este número com a 10 2 representação binária de –1010 = 1111 01102. Fazendo a soma, temos:
que é exatamente 5 em decimal, ou seja, conseguimos simplificar o hardware do nosso processador, que deverá apenas somar dois
números binários para fazer somas e subtrações. A Figura 1.8 apresenta um exemplo com 4 bits para binários em complemento a
2, enquanto a Figura 1.9 resume o resultado dessas codificações para 4 bits.
Figura 1.8 Números binários de 4 bits em complemento a 2.
Figura 1.9 Números binários de 4 bits em várias representações.
EXERCÍCIO 1.12
Escreva o binário equivalente a –215 em sinal/valor, complemento a 1 e
complemento a 2, usando 16 bits para a codi cação.
EXERCÍCIO 1.13
Escreva o binário equivalente a +215 em sinal/valor, complemento a 1 e
complemento a 2, usando 16 bits para a codi cação.
EXERCÍCIO 1.14
Escreva o binário equivalente a –215 em excesso–511. Qual o menor n possível
para escrever este número? Quantos bits são necessários neste caso?
EXERCÍCIO 1.15
Escreva os binários equivalentes a 120 e a 8, usando 8 bits, e execute a soma
desses números binários. Dependendo da representação usada para números
inteiros, essa soma vai causar o chamado transbordamento (over ow). Como
interpretar esse resultado de acordo com as representações de números binários
negativos?