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

Passo 1

O enunciado pede para calcular a subtração entre dois números binários de 8 bits com sinal e dizer se houve overflow. As informações dadas são:
  • Minuendo: 00110011_{2}.
  • Subtraendo: 00010000_{2}.
  • Pedido: realizar 00110011_{2} - 00010000_{2} considerando representação com sinal em 8 bits e indicar se ocorreu overflow.

Passo 2

Primeiro, vamos fixar como interpretar “números binários de 8 bits com sinal”: vou usar a representação em complemento de dois (padrão em computadores). Regras importantes e úteis:
  • O bit mais significativo (MSB, à esquerda) indica o sinal: 0 = número não negativo, 1 = número negativo.
  • Para um número de 8 bits em complemento de dois, o intervalo de valores representáveis é -128 até 127.
  • Para números com MSB 0 (positivos), o valor é a conversão binária usual.
  • Para números com MSB 1 (negativos), o valor absoluto é obtido fazendo o complemento de dois (inverter bits e somar 1) e atribuindo sinal negativo.
  • Para subtração, é prático transformar em adição: A - B = A + (\text{complemento de dois de }B). No resultado de uma soma em complemento de dois, o carry final é descartado; overflow em soma ocorre quando os operandos têm o mesmo sinal e o resultado tem sinal diferente.

Passo 3

Interpretação dos operandos (conversão para decimal, passo a passo):
  • Minuendo 00110011_{2}: MSB é 0, logo é positivo. Converter:
    00110011_{2} = 0\cdot128 + 0\cdot64 + 1\cdot32 + 1\cdot16 + 0\cdot8 + 0\cdot4 + 1\cdot2 + 1\cdot1 = 32+16+2+1 = 51.
    Portanto o minuendo é 51 em decimal.
  • Subtraendo 00010000_{2}: MSB 0, também positivo.
    00010000_{2} = 0\cdot128 + 0\cdot64 + 0\cdot32 + 1\cdot16 + 0\cdot8 + 0\cdot4 + 0\cdot2 + 0\cdot1 = 16.
    Portanto o subtraendo é 16 em decimal.

Passo 4

Subtração em decimal (checagem rápida):
51 - 16 = 35.
Vamos transformar 35 em binário de 8 bits. Decompondo:
35 = 32 + 2 + 1 \Rightarrow \text{bits em ordem: } 00100011_{2}.
Logo o resultado esperado é 00100011_{2}.

Passo 5

Fazendo pela via binária com complemento de dois (método prático para prova):
  1. Calcular o complemento de dois do subtraendo 00010000_{2}:
  • Inverter bits: 00010000_{2} \to 11101111_{2}.
  • Somar 1: 11101111_{2} + 1 = 11110000_{2}.
    Portanto o complemento de dois de 00010000_{2} é 11110000_{2}.
  1. Somar ao minuendo:
\begin{array}{r} \;00110011_{2}\\\\ +\,11110000_{2}\\hline \;00100011_{2}\\ \text{(com carry final que se descarta)} \end{array}
Fazendo a adição bit a bit aparece um carry final, que em complemento de dois é ignorado; o resultado em 8 bits é 00100011_{2}, que coincide com 35 decimal, como vimos.

Passo 6

Detecção de overflow:
  • Regra prática: ao somar dois números em complemento de dois, se os dois operandos têm o mesmo sinal e o resultado tem sinal diferente, ocorreu overflow.
  • Aqui os operandos originais são 00110011_{2} (positivo) e 00010000_{2} (positivo). O resultado 00100011_{2} também tem MSB 0 (positivo). Assim não há mudança de sinal inesperada → sem overflow.
  • Checagem por intervalo: o resultado decimal 35 está dentro do intervalo representável em 8 bits com sinal ( -128 a 127), logo também confirma que não ocorreu overflow.

Resposta

00100011_{2}
Não ocorreu overflow.

Exercícios relacionados