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

Passo 1

O enunciado dá dois números binários de 8 bits com sinal e pede para somá‑los e indicar se houve overflow. Os dados são:
  • Primeiro número: 01110000_{2}.
  • Segundo número: 01011010_{2}.
O que é pedido:
  • Calcular a soma destes dois números em aritmética de 8 bits com sinal.
  • Dizer se ocorreu overflow nessa operação.

Passo 2

Escolha da representação e regra de overflow (escolha explicada): vou interpretar “números binários de 8 bits com sinal” como números em complemento de dois (representação padrão em computadores). Em complemento de dois, o intervalo representável com 8 bits é
-2^{7}\\ \text{até}\\\ 2^{7}-1,\quad\text{isto é}\quad -128 \\ \text{até}\\\ 127.ééé
Regra prática para detectar overflow em complemento de dois:
  • Se somamos dois números com o mesmo sinal (dois positivos ou dois negativos) e o resultado tiver sinal diferente, então ocorreu overflow.
  • Equivalentemente, se o carry que entra no bit de sinal é diferente do carry que sai do bit de sinal, houve overflow.
Vou usar essas regras para chegar à conclusão.

Passo 3

Converter cada número para decimal (explicando o método): para converter um binário positivo em decimal somamos os pesos das potências de dois onde há 1.
  • Para 01110000_{2}: os bits valem, da esquerda (bit mais significativo) para a direita,
    0\cdot 2^{7}+1\cdot 2^{6}+1\cdot 2^{5}+1\cdot 2^{4}+0\cdot 2^{3}+0\cdot 2^{2}+0\cdot 2^{1}+0\cdot 2^{0}.
    Calculando: 01110000_{2} = 2^{6}+2^{5}+2^{4}=64+32+16=112.
  • Para 01011010_{2}: 01011010_{2} = 2^{6}+2^{4}+2^{3}+2^{1}=64+16+8+2=90.
Somando em decimal sem restrições, 112+90=202. Note que 202>127, que já sugere overflow no espaço de 8 bits com sinal. Mas vamos fazer a soma binária e aplicar a regra formal.

Passo 4

Somar bit a bit em binário (faço os passos de menor ordem para maior, mostrando carry):
Vamos enumerar os bits de b_0 (LSB) até b_7 (MSB, bit de sinal).
Dados:
\begin{aligned} A &= 01110000_{2},\\\ B &= 01011010_{2}. \end{aligned}
Agora as somas por bit com o carry de entrada (começando com carry 0):
  • Bit b_0: 0+0+\text{carry}_\text{in}=0+0+0=0. Resultado b_0=0. Carry para próximo bit: 0.
  • Bit b_1: 0+1+0=1. Resultado b_1=1. Carry: 0.
  • Bit b_2: 0+0+0=0. Resultado b_2=0. Carry: 0.
  • Bit b_3: 0+1+0=1. Resultado b_3=1. Carry: 0.
  • Bit b_4: 1+1+0=2 (em binário 10). Resultado b_4=0. Carry: 1.
  • Bit b_5: 1+0+1(\text{carry})=2. Resultado b_5=0. Carry: 1.
  • Bit b_6: 1+1+1(\text{carry})=3 (em binário 11). Resultado b_6=1. Carry: 1.
  • Bit b_7 (MSB, bit de sinal): 0+0+1(\text{carry})=1. Resultado b_7=1. Carry de saída (além do MSB): 0.
Juntando os bits do MSB ao LSB obtemos o resultado binário:
01110000_{2}+01011010_{2}=11001010_{2}.

Passo 5

Interpretar o resultado em complemento de dois e verificar overflow:
  • O resultado em binário é 11001010_{2}. Como o bit de sinal (MSB) é 1, esse valor, em complemento de dois de 8 bits, representa um número negativo. Para achar seu valor decimal em complemento de dois, podemos calcular o valor como unsigned e subtrair 2^{8}, ou calcular a magnitude pela complementarização: 11001010_{2}\\ (\text{unsigned}) = 128+64+0+0+8+0+2+0 = 202.Como número em complemento de dois de 8 bits, o valor é 202-256=-54. Logo o resultado interpretado como número com sinal é -54.
  • Aplicando a regra de overflow: os dois operandos tinham bit de sinal 0 (eram positivos: 112 e 90), e o resultado tem bit de sinal 1 (negativo). Soma de dois positivos resultando em negativo implica overflow. Portanto houve overflow.
  • Verificação pela condição dos carries no bit de sinal: o carry que entrou no bit de sinal (entrada no b_7) foi 1 e o carry que saiu do bit de sinal foi 0. Como esses carries são diferentes, isso confirma overflow.

Passo 6

Resumo do que significa na prática (um empurrão final para a prova):
  • Mesmo que a soma binária modulo 2^8 11001010_{2}, em aritmética com sinal (complemento de dois) esse resultado representa -54, o que não é o correto valor exato da soma aritmética 112+90=202. O que aconteceu é que a soma “transbordou” o intervalo representável [-128,127] — isto é o overflow.
  • Em provas, para verificar overflow em complemento de dois de modo rápido: se os sinais dos dois somandos forem iguais e o sinal do resultado for diferente, marcou overflow.

Resposta

01110000_{2}+01011010_{2}=11001010_{2} (resultado em 8 bits)\newline
Overflow: sim.

Exercícios relacionados