Dados os valores \mathrm{X}=0111_{2} e \mathrm{Y}=1101_{2} representados por 4 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á duas palavras binárias representadas em complemento de dois com 4 bits:
X = 0111_2,\qquad Y = 1101_2.
As perguntas são:
a. X+Y causa overflow? Por quê?
b. X-Y causa overflow? Por quê?
Listei as informações relevantes dadas: os padrões de bits de X e Y e que a representação é em complemento de dois com 4 bits (logo a faixa representável é limitada). A resolução começa a partir daqui.

Passo 2

Entender o valor decimal (assinado) de cada palavra em complemento de dois com 4 bits é essencial. Vou mostrar como converter:
Regra rápida para converter um número em complemento de dois (com n bits):
  • Se o bit mais significativo (MSB) for 0, o número é positivo e seu valor decimal é o valor binário usual.
  • Se o MSB for 1, o número é negativo e o valor decimal é o valor binário interpretado sem sinal menos 2^n; em outras palavras, valor = (valor unsigned) -2^n.
Aplicando a regra:
  • Para X = 0111_2: o MSB é 0, então é positivo. 0111_2 = 0\cdot2^3 + 1\cdot2^2 + 1\cdot2^1 + 1\cdot2^0 = 4+2+1 = 7. Logo X = +7.
  • Para Y = 1101_2: o MSB é 1, então é negativo. Primeiro calcule 1101_2 como inteiro sem sinal: 1\cdot2^3+1\cdot2^2+0\cdot2^1+1\cdot2^0 = 8+4+0+1 = 13. Como n=4, subtrai-se 2^4=16: 13-16 = -3. Logo Y = -3.
Resumo:
X = +7,\qquad Y = -3.

Passo 3

Lembrar da faixa de valores representáveis em complemento de dois com 4 bits:
\text{faixa} = \{-2^{3},\dots,2^{3}-1\} = \{-8,\dots,7\}.
Qualquer resultado fora dessa faixa provoca overflow (não pode ser representado corretamente em 4 bits em complemento de dois).

Passo 4

Resolver (a) por análise decimal primeiro (intuitivo):
X+Y = (+7) + (-3) = +4,
e +4 está dentro da faixa \{-8,\dots,7\}. Então, por valor decimal, não há overflow. Agora vamos confirmar com a soma binária passo a passo (mostra como fazer na prova).
Somando bit a bit (do LSB para MSB) 0111_2 + 1101_2:
Escrevo a operação e os transportes:
  • LSB: 1+1=0 com transporte 1.
  • Próximo: 1+0+1(\text{carry})=0 com transporte 1.
  • Próximo: 1+1+1(\text{carry})=1 com transporte 1.
  • MSB: 0+1+1(\text{carry})=0 com transporte final 1.
O resultado nos 4 bits é 0100_2 e há um carry-out (transporte) final igual a 1. O resultado 0100_2 corresponde a +4, coerente com a conta decimal.

Passo 5

Explicar a condição de overflow em complemento de dois (método prático que usa sinais):
  • Overflow em soma ocorre quando os operandos têm o mesmo sinal e o resultado tem sinal diferente.
  • Alternativa equivalente (mais “baixo nível”): overflow ocorre se o carry que entra no bit de sinal for diferente do carry que sai do bit de sinal.
Aplicando ao caso (a):
  • Os sinais de X e Y são diferentes ( +7 e -3). Soma de números com sinais opostos nunca gera overflow — porque o resultado fica entre os operandos em valor absoluto e, aqui, deu +4 dentro da faixa.
  • Verificação com os carries: o carry que entrou no bit de sinal foi 1 e o carry que saiu também foi 1, são iguais ⇒ sem overflow segundo a condição dos carries.
Conclusão para (a): não há overflow.

Passo 6

Agora (b): vamos analisar X-Y. Em complemento de dois, subtração se faz como adição do negativo:
X - Y = X + (-Y).
Precisamos obter -Y (o oposto de Y) e depois somar a X.

Passo 7

Calcular -Y (o inverso em complemento de dois) passo a passo:
  • Y = 1101_2.
  • Para obter -Y faça o complemento de cada bit (inverter) e some 1:
    • Inverso bit a bit de 1101_2 é 0010_2.
    • Somando 1: 0010_2 + 0001_2 = 0011_2.
      Logo -Y = 0011_2. Em decimal 0011_2 = +3, coerente com -(-3)=+3.

Passo 8

Somar X + (-Y) em binário: 0111_2 + 0011_2.
Faço coluna a coluna (LSB→MSB):
  • LSB: 1 + 1 = 0, carry 1.
  • Próxima: 1 + 1 + 1(\text{carry}) = 1, carry 1. (porque 1+1+1=3 que em binário dá bit 1 e carry 1)
  • Próxima: 1 + 0 + 1(\text{carry}) = 0, carry 1.
  • MSB: 0 + 0 + 1(\text{carry}) = 1, carry-out final 0.
Resultado nos 4 bits: 1010_2. Não há carry-out final (ou seja, carry-out = 0). Interpretando 1010_2 em complemento de dois com 4 bits: o MSB é 1, então é negativo; valor decimal = 1010_2 como unsigned é 10, fazendo 10-16 = -6. Ou visto em termos de overflow: o valor real esperado (+7) - (-3) = +10 não cabe em 4 bits (faixa máxima é +7), então ocorreu overflow e o número guardado 1010_2 é a representação truncada que corresponde a -6, não ao +10.

Passo 9

Usar as regras de detecção para (b):
  • Observação dos sinais: X é positivo ( +7) e -Y é positivo ( +3); somamos dois números positivos e obtivemos um resultado cujo MSB é 1 (resultado negativo 1010_2). Soma de dois positivos dando negativo indica overflow.
  • Checando os carries: o carry que entrou no bit de sinal foi 1 (da coluna seguinte) e o carry que saiu do bit de sinal foi 0. Eles são diferentes ⇒ overflow (pela condição dos carries).
Conclusão para (b): houve overflow porque o valor exato +10 está fora da faixa \{-8,\dots,7\} e a soma de dois operandos com mesmo sinal resultou num sinal diferente (ou, equivalentemente, carry-in e carry-out do bit de sinal diferem).

Resposta

a) Não.
b) Sim.

Exercícios relacionados