Supondo números binários de 8 bits com sinal, realize as seguintes subtrações e indique se ocorreu overflow:
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:
. - Subtraendo:
.
O que é pedido: - Calcular
. - 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
para números não negativos e para números negativos. - Intervalo representável em 8 bits (complemento de dois):
. Isso é porque o menor valor é e o maior é . - Para subtração
é comum transformar em soma: . Então preciso obter o complemento de dois de 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
, também houve overflow.
Passo 3
Converter os operandos para decimal para entender a operação (passo-a-passo):
- Para
o bit de sinal é , então é positivo. Converter binário normal:
Portanto
.
- Para
o bit de sinal é , então é negativo em complemento de dois. Para achar o valor decimal faço o complemento de dois para obter a magnitude: - Inverter bits de
: . - Somar
: .
- Inverter bits de
Portanto
.
Passo 4
Interpretar a subtração em decimal e prever overflow:
- Em decimal a operação é
- Como
não está no intervalo representável , 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
). Já vimos que
e em binário positivo
. Agora somo em binário:
Faço a soma bit a bit (direita para a esquerda) com as cargas:
-
(sem carry), -
, -
, -
com carry , -
com carry , -
com carry , -
com carry , -
(sem carry final que importe para 8 bits).
Resultado de 8 bits:.
Passo 6
Interpretar o resultado binário e verificar overflow pela regra de sinais:
- Os dois operandos somados foram
e (ambos positivos). O resultado em 8 bits obtido é , que tem bit de sinal (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
para achar a magnitude: - Inverter:
. - Somar
: .
- Inverter:
Logo
interpretado como complemento de dois é
. Esse é o valor que aparece por wrap-around em 8 bits, mas o valor aritmético correto é
, que não cabe em 8 bits — portanto o resultado armazenado (
) é incorreto como resultado aritmético por causa do overflow.
Passo 7
Resumo final e conclusão:
- Resultado aritmético exato:
(fora do intervalo ). - Resultado armazenado em 8 bits (wrap):
, que corresponderia a se lido em complemento de dois. - Overflow: ocorreu (sim), pois soma de dois números positivos deu resultado com bit de sinal negativo e
está fora do intervalo representável.
Resposta
Overflow: sim (resultado aritmético
fora do intervalo
)