Supondo números binários de 8 bits com sinal, realize as seguintes adições e indique se ocorreu overflow:
Passo 1
O enunciado pede que eu some dois números binários de 8 bits com sinal e indique se ocorreu overflow. Os dados fornecidos são:
- Primeiro operando:
. - Segundo operando:
.
Pergunta: qual é a soma em 8 bits (com sinal) e ocorreu overflow?
Passo 2
Primeiro preciso fixar qual representação de números com sinal estou usando. Como o enunciado só diz “8 bits com sinal” e isso costuma significar complemento de dois em exercícios desse tipo, vou usar complemento de dois.
Vou explicar rapidamente e com calma como interpretar e converter números negativos em complemento de dois (passo-a-passo curtinho, tipo receita de bolo):
Vou explicar rapidamente e com calma como interpretar e converter números negativos em complemento de dois (passo-a-passo curtinho, tipo receita de bolo):
- Em complemento de dois, o bit mais significativo (MSB) indica sinal:
= não-negativo, = negativo. - Para obter o valor decimal de um binário negativo em complemento de dois: inverter todos os bits e somar
; o resultado dá a magnitude positiva, e então acrescenta-se o sinal negativo. Exemplo: para achar o valor de se começa com , faça e converta para decimal.
Agora vou converter os dois operandos para decimal para ter um “check” mental do que esperamos:
- Para
: MSB é então é negativo. - Invertendo bits:
. - Somando
: . - Convertendo
para decimal: . - Logo
representa .
- Invertendo bits:
- Para
: MSB é então também é negativo. - Invertendo bits:
. - Somando
: . - Convertendo
para decimal: . - Logo
representa .
- Invertendo bits:
Soma decimal esperada:
. Isso me dá uma referência do que devo encontrar no resultado binário.
Passo 3
Agora faço a soma bit a bit (como na prova, direita para esquerda), anotando os carries. Vou mostrar cada adição simples e o carry gerado:
Operandos alinhados:
Adição bit a bit (LSB para MSB):
- Bit 0 (LSB):
com carry . - Bit 1:
com carry . - Bit 2:
com carry . - Bit 3:
com carry . - Bit 4:
com carry . - Bit 5:
com carry . - Bit 6:
com carry . (porque ) - Bit 7 (MSB):
com carry de saída .
Lendo os bits do MSB ao LSB, o resultado (desconsiderando o carry de saída final, que se descarta em complemento de dois) é:
Como checagem rápida:
em complemento de dois é negativo (MSB
). Inverto e somo 1 para achar a magnitude:
- Inverter
. - Somar
: . -
em decimal, portanto o valor é , que coincide com a conta decimal que eu esperava.
Passo 4
Agora digo se houve overflow. Regras práticas para detectar overflow em complemento de dois:
- Regra 1 (mais usada em provas): overflow ocorre se o carry que entra no bit de sinal (MSB) for diferente do carry que sai do bit de sinal.
- Regra 2 (intuitiva): overflow ocorre se somamos dois números com o mesmo sinal e o resultado tiver sinal diferente.
Aplicando:
- Ambos operandos têm MSB
(ambos negativos). O resultado tem MSB (negativo). Pela Regra 2, não houve mudança inesperada de sinal, logo sem overflow. - Pela Regra 1, o carry que entrou no MSB foi
(conforme o passo anterior) e o carry que saiu do MSB também foi ; como são iguais, não houve overflow.
Portanto não ocorreu overflow.
Resposta
Não ocorreu overflow.