Supondo números binários de 8 bits com sinal, realize as seguintes adições e indique se ocorreu overflow:
11011001_{2}+11100111_{2}

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: 11011001_2.
  • Segundo operando: 11100111_2.
    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):
  • Em complemento de dois, o bit mais significativo (MSB) indica sinal: 0 = não-negativo, 1 = negativo.
  • Para obter o valor decimal de um binário negativo em complemento de dois: inverter todos os bits e somar 1; o resultado dá a magnitude positiva, e então acrescenta-se o sinal negativo. Exemplo: para achar o valor de b se b começa com 1, faça \text{inverter}(b)+1 e converta para decimal.
Agora vou converter os dois operandos para decimal para ter um “check” mental do que esperamos:
  • Para 11011001_2: MSB é 1 então é negativo.
    • Invertendo bits: 00100110_2.
    • Somando 1: 00100110_2 + 1 = 00100111_2.
    • Convertendo 00100111_2 para decimal: 32 + 4 + 2 + 1 = 39.
    • Logo 11011001_2 representa -39.
  • Para 11100111_2: MSB é 1 então também é negativo.
    • Invertendo bits: 00011000_2.
    • Somando 1: 00011000_2 + 1 = 00011001_2.
    • Convertendo 00011001_2 para decimal: 16 + 8 + 1 = 25.
    • Logo 11100111_2 representa -25.
Soma decimal esperada: -39 + (-25) = -64. 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:
\begin{array}{r} 11011001_2\\\\ +\,11100111_2\\\ \hline \end{array}
Adição bit a bit (LSB para MSB):
  • Bit 0 (LSB): 1 + 1 = 0 com carry 1.
  • Bit 1: 0 + 1 + \text{carry }1 = 0 com carry 1.
  • Bit 2: 0 + 1 + \text{carry }1 = 0 com carry 1.
  • Bit 3: 1 + 0 + \text{carry }1 = 0 com carry 1.
  • Bit 4: 1 + 0 + \text{carry }1 = 0 com carry 1.
  • Bit 5: 0 + 1 + \text{carry }1 = 0 com carry 1.
  • Bit 6: 1 + 1 + \text{carry }1 = 1 com carry 1. (porque 1+1+1=3_{10}=11_2)
  • Bit 7 (MSB): 1 + 1 + \text{carry }1 = 1 com carry de saída 1.
Lendo os bits do MSB ao LSB, o resultado (desconsiderando o carry de saída final, que se descarta em complemento de dois) é:
11000000_2.
Como checagem rápida: 11000000_2 em complemento de dois é negativo (MSB 1). Inverto e somo 1 para achar a magnitude:
  • Inverter 11000000_2 \to 00111111_2.
  • Somar 1: 00111111_2 + 1 = 01000000_2.
  • 01000000_2 = 64 em decimal, portanto o valor é -64, 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 1 (ambos negativos). O resultado tem MSB 1 (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 1 (conforme o passo anterior) e o carry que saiu do MSB também foi 1; como são iguais, não houve overflow.
Portanto não ocorreu overflow.

Resposta

11000000_2
Não ocorreu overflow.

Exercícios relacionados