Dados os valores
e
representados por 4 bits em Complemento-2, responda às seguintes questões:
a.
causa overflow? Por quê?
b. X-Y causa overflow? Por quê?
a.
b. X-Y causa overflow? Por quê?
Passo 1
O enunciado dá duas palavras binárias representadas em complemento de dois com
bits:
As perguntas são:
a. causa overflow? Por quê?
b. causa overflow? Por quê?
a.
b.
Listei as informações relevantes dadas: os padrões de bits de
e
e que a representação é em complemento de dois com
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
bits é essencial. Vou mostrar como converter:
Regra rápida para converter um número em complemento de dois (com
bits):
- Se o bit mais significativo (MSB) for
, o número é positivo e seu valor decimal é o valor binário usual. - Se o MSB for
, o número é negativo e o valor decimal é o valor binário interpretado sem sinal menos ; em outras palavras, valor = (valor unsigned) .
Aplicando a regra:
- Para
: o MSB é , então é positivo. . Logo . - Para
: o MSB é , então é negativo. Primeiro calcule como inteiro sem sinal: . Como , subtrai-se : . Logo .
Resumo:
Passo 3
Lembrar da faixa de valores representáveis em complemento de dois com
bits:
Qualquer resultado fora dessa faixa provoca overflow (não pode ser representado corretamente em
bits em complemento de dois).
Passo 4
Resolver (a) por análise decimal primeiro (intuitivo):
e
está dentro da faixa
. 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)
:
Escrevo a operação e os transportes:
- LSB:
com transporte . - Próximo:
com transporte . - Próximo:
com transporte . - MSB:
com transporte final .
O resultado nos
bits é
e há um carry-out (transporte) final igual a
. O resultado
corresponde a
, 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
e são diferentes ( e ). Soma de números com sinais opostos nunca gera overflow — porque o resultado fica entre os operandos em valor absoluto e, aqui, deu dentro da faixa. - Verificação com os carries: o carry que entrou no bit de sinal foi
e o carry que saiu também foi , 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
. Em complemento de dois, subtração se faz como adição do negativo:
Precisamos obter
(o oposto de
) e depois somar a
.
Passo 7
Calcular
(o inverso em complemento de dois) passo a passo:
-
. - Para obter
faça o complemento de cada bit (inverter) e some : - Inverso bit a bit de
é . - Somando
: .
Logo. Em decimal , coerente com .
- Inverso bit a bit de
Passo 8
Somar
em binário:
.
Faço coluna a coluna (LSB→MSB):
- LSB:
, carry . - Próxima:
, carry . (porque que em binário dá bit e carry ) - Próxima:
, carry . - MSB:
, carry-out final .
Resultado nos
bits:
. Não há carry-out final (ou seja, carry-out =
). Interpretando
em complemento de dois com
bits: o MSB é
, então é negativo; valor decimal =
como unsigned é
, fazendo
. Ou visto em termos de overflow: o valor real esperado
não cabe em
bits (faixa máxima é
), então ocorreu overflow e o número guardado
é a representação truncada que corresponde a
, não ao
.
Passo 9
Usar as regras de detecção para (b):
- Observação dos sinais:
é positivo ( ) e é positivo ( ); somamos dois números positivos e obtivemos um resultado cujo MSB é (resultado negativo ). Soma de dois positivos dando negativo indica overflow. - Checando os carries: o carry que entrou no bit de sinal foi
(da coluna seguinte) e o carry que saiu do bit de sinal foi . Eles são diferentes ⇒ overflow (pela condição dos carries).
Conclusão para (b): houve overflow porque o valor exato
está fora da faixa
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.
b) Sim.