Supondo números binários de 8 bits com sinal, realize as seguintes subtrações e indique se ocorreu overflow:
01101101_{2}-11101000_{2}

Passo 1

O enunciado dá a operação entre dois números binários de 8 bits com sinal e pede para realizar a subtração e indicar se ocorreu overflow. Dados fornecidos:
  • Minuendo: \,01101101_2.
  • Subtraendo: \,11101000_2.
    O que é pedido:
  • Calcular \,01101101_2 - 11101000_2.
  • Dizer se ocorreu overflow na operação (isto é, se o resultado não cabe no intervalo representável com 8 bits com sinal).

Passo 2

Decisão do método e lembrete prático (explicação didática):
  • Vou usar a representação em complemento de dois (método padrão para números binários com sinal em 8 bits). Em complemento de dois, o bit mais à esquerda (bit de sinal) vale 0 para números não negativos e 1 para números negativos.
  • Intervalo representável em 8 bits (complemento de dois): \,[-128,127]. Isso é porque o menor valor é -2^{7}=-128 e o maior é 2^{7}-1=127.
  • Para subtração \,A-B é comum transformar em soma: \,A-B=A+(-B). Então preciso obter o complemento de dois de \,B quando for conveniente.
  • Regra prática de detecção de overflow (complemento de dois) em soma: se somarmos dois números com o mesmo sinal e o sinal do resultado for diferente, então houve overflow. Alternativamente, se o resultado aritmético (em decimal) estiver fora de \,[-128,127], também houve overflow.

Passo 3

Converter os operandos para decimal para entender a operação (passo-a-passo):
  • Para \,01101101_2 o bit de sinal é 0, então é positivo. Converter binário normal:
01101101_2 = 0\cdot128+1\cdot64+1\cdot32+0\cdot16+1\cdot8+1\cdot4+0\cdot2+1\cdot1 = 64+32+8+4+1 = 109.
Portanto \,01101101_2 = +109.
  • Para \,11101000_2 o bit de sinal é 1, então é negativo em complemento de dois. Para achar o valor decimal faço o complemento de dois para obter a magnitude:
    1. Inverter bits de \,11101000_2: \,00010111_2.
    2. Somar 1: \,00010111_2 + 1 = 00011000_2.
00011000_2 = 16+8 = 24.
Portanto \,11101000_2 = -24.

Passo 4

Interpretar a subtração em decimal e prever overflow:
  • Em decimal a operação é
109 - (-24) = 109 + 24 = 133.
  • Como 133 não está no intervalo representável \,[-128,127], isso já indica que ocorrerá overflow se a operação for feita em 8 bits com sinal.
  • Vou também calcular a soma binária em 8 bits (com wrap-around) para ver o resultado que ficaria armazenado em 8 bits.

Passo 5

Calcular a soma binária (fazendo \,A- B = A + (-B)). Já vimos que -B = 24 e em binário positivo \,24 = 00011000_2. Agora somo em binário:
\begin{array}{r} 01101101\\\\ +\,00011000\\\ \hline 10000101 \end{array}
Faço a soma bit a bit (direita para a esquerda) com as cargas:
  • 1+0=1 (sem carry),
  • 0+0=0,
  • 1+0=1,
  • 1+1=0 com carry 1,
  • 0+1+1(\text{carry})=0 com carry 1,
  • 1+0+1(\text{carry})=0 com carry 1,
  • 1+0+1(\text{carry})=0 com carry 1,
  • 0+0+1(\text{carry})=1 (sem carry final que importe para 8 bits).
    Resultado de 8 bits: \,10000101_2.

Passo 6

Interpretar o resultado binário e verificar overflow pela regra de sinais:
  • Os dois operandos somados foram \,+109 e \,+24 (ambos positivos). O resultado em 8 bits obtido é \,10000101_2, que tem bit de sinal 1 (indicando negativo). Somar dois positivos e obter resultado negativo é exatamente o caso clássico de overflow em complemento de dois. Logo ocorreu overflow.
  • Para ver o que esse padrão binário representa se interpretado (apesar do overflow): faço complemento de dois de \,10000101_2 para achar a magnitude:
    1. Inverter: \,01111010_2.
    2. Somar 1: \,01111010_2 + 1 = 01111011_2.
01111011_2 = 64+32+16+8+2+1 = 123.
Logo \,10000101_2 interpretado como complemento de dois é -123. Esse é o valor que aparece por wrap-around em 8 bits, mas o valor aritmético correto é +133, que não cabe em 8 bits — portanto o resultado armazenado ( -123) é incorreto como resultado aritmético por causa do overflow.

Passo 7

Resumo final e conclusão:
  • Resultado aritmético exato: 133 (fora do intervalo [-128,127]).
  • Resultado armazenado em 8 bits (wrap): \,10000101_2, que corresponderia a -123 se lido em complemento de dois.
  • Overflow: ocorreu (sim), pois soma de dois números positivos deu resultado com bit de sinal negativo e 133 está fora do intervalo representável.

Resposta

10000101_2
Overflow: sim (resultado aritmético 133 fora do intervalo [-128,127])

Exercícios relacionados