Dados os valores \mathrm{X}=10010111_{2} e \mathrm{Y}=11000001_{2} representados por 8 bits em Complemento-2, responda às seguintes questões:
a. \mathrm{X}+\mathrm{Y} causa overflow? Por quê?
b. X-Y causa overflow? Por quê?

Passo 1

O enunciado dá dois números binários de 8 bits, em complemento de dois:
X = 10010111_2,\qquad Y = 11000001_2
E pergunta:
a. \;X+Y causa overflow? Por quê?
b. \;X-Y causa overflow? Por quê?
As informações relevantes: são 8 bits em complemento-2 (faixa representável é de -128 até +127). Não começo a resolver ainda; apenas registrei o que foi pedido e os dados.

Passo 2

Como interpretar números em complemento-2 (explicação didática passo a passo).
  • Para um número de n bits, o bit mais significativo (MSB) indica o sinal: se o MSB é 0 o número é não-negativo; se o MSB é 1 o número é negativo.
  • Se o MSB é 0, a interpretação é a usual em binário sem sinal.
  • Se o MSB é 1, para achar o valor decimal do número negativo fazemos:
    1. Inverter todos os bits (0↔1).
    2. Somar 1 ao resultado (isto é, aplicar a operação “inverter e somar 1”).
    3. Interpretar o valor obtido como magnitude positiva M; o número original vale -M.
  • Exemplo curto: para um byte 10000001_2: inverter → 01111110, somar 1 01111111_2=127, logo 10000001_2 = -127.
Vou usar esse procedimento para converter X e Y em decimais assinados.

Passo 3

Converter X e Y para decimal (passo a passo).
Para X = 10010111_2 (MSB = 1 → negativo):
  • Inverter bits: 01101000_2.
  • Somar 1: 01101000_2 + 1 = 01101001_2.
  • Calcular o valor decimal de 01101001_2: 01101001_2 = 64 + 32 + 8 + 1 = 105.
  • Portanto X = -105.
Para Y = 11000001_2 (MSB = 1 → negativo):
  • Inverter bits: 00111110_2.
  • Somar 1: 00111110_2 + 1 = 00111111_2.
  • Calcular o valor decimal de 00111111_2: 00111111_2 = 32 + 16 + 8 + 4 + 2 + 1 = 63.
  • Portanto Y = -63.
Resumo decimal: X=-105, Y=-63. Lembre-se: a faixa representável em 8 bits complemento-2 é [-128,\;127].

Passo 4

Regra de overflow em complemento-2 (explicação didática):
  • Quando somamos dois números em complemento-2 com o mesmo sinal, pode ocorrer overflow se o resultado matemático exceder a faixa [-2^{n-1},\;2^{n-1}-1]. Em prática rápida na prova, use uma destas verificações equivalentes:
    1. Se os dois operandos têm o mesmo sinal e o resultado tem sinal diferente → houve overflow.
    2. Alternativa de bit: comparar o carry que entra no bit de sinal com o carry que sai do bit de sinal; se forem diferentes houve overflow.
  • Se os operandos têm sinais opostos, não ocorre overflow (a soma fica mais perto de zero).
Vou aplicar essas regras aos casos pedidos.

Passo 5

Calcular X+Y e verificar overflow.
Usando os valores decimais:
X+Y = (-105) + (-63) = -168.
Comparando com a faixa [-128,\;127], o valor -168 está fora da faixa representável em 8 bits, logo matematicamente há overflow.
Agora faço a adição binária em 8 bits para ver o efeito (mostrando o “wrap-around”):
\begin{array}{r} \;10010111_2\\\\ +\;11000001_2\\\ \hline \;01011000_2\quad\text{(resultado em 8 bits)}\\\ \end{array}
Observações:
  • O resultado em 8 bits é 01011000_2, cujo MSB é 0 (resultado positivo), e seu valor decimal é 01011000_2 = 64 + 16 + 8 = 88.
  • Mas o resultado matemático correto é -168. O fato de que somamos dois números com MSB = 1 (ambos negativos) e obtivemos um resultado com MSB = 0 (positivo) indica overflow pela regra do mesmo sinal → sinal diferente no resultado.
  • Também é possível ver que houve carry para fora do byte: o carry que entra no bit de sinal foi diferente do carry que saiu — isto também sinaliza overflow.
Conclusão: para X+Y ocorre overflow.

Passo 6

Calcular X-Y e verificar overflow.
Estratégia prática: X-Y = X + (-Y). Já sabemos Y=-63, então -Y = 63. Em binário (8 bits) 63 é
63 = 00111111_2.
Somar X e +63 (mostrando a adição binária):
\begin{array}{r} \;10010111_2\quad (X)\\\\ +\;00111111_2\quad (+63)\\\ \hline \;11010110_2\quad\text{(resultado em 8 bits)} \end{array}
Verificações:
  • Interpretação decimal de 11010110_2: MSB = 1 → negativo. Para achar a magnitude, inverter e somar 1: \text{inverter }11010110_2 \to 00101001_2,\quad +1 \to 00101010_2 = 32 + 8 + 2 = 42.Logo 11010110_2 = -42.
  • Usando decimais: X-Y = (-105) - (-63) = -105 + 63 = -42. Esse resultado está dentro da faixa [-128,\;127], portanto não há overflow.
  • Pela regra de sinais: aqui os operandos efetivos na soma são X negativo e -Y positivo (sinais opostos), e soma de sinais opostos não gera overflow.
Conclusão: para X-Y não ocorre overflow.

Passo 7

Recapitulando de modo bem claro e direto (pra você ter a resposta pronta na prova):
  • X+Y dá soma matemática -168, fora da faixa [-128,127]; em binário de 8 bits ocorreu wrap-around para 01011000_2 (positivo). Dois operandos negativos produziram resultado positivo → overflow.
  • X-Y dá soma matemática -42, dentro da faixa; o resultado em 8 bits é 11010110_2 (que corresponde a -42). Operandos com sinais opostos → sem overflow.

Resposta

a) Sim.
b) Não.

Exercícios relacionados