Supondo números binários de 8 bits com sinal, realize as seguintes adições e indique se ocorreu overflow:
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:
. - Segundo número:
.
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 é
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
: os bits valem, da esquerda (bit mais significativo) para a direita,
.
Calculando: - Para
:
Somando em decimal sem restrições,
. Note que
, 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 (LSB) até
(MSB, bit de sinal).
Vamos enumerar os bits de
Dados:
Agora as somas por bit com o carry de entrada (começando com carry
):
- Bit
: . Resultado . Carry para próximo bit: . - Bit
: . Resultado . Carry: . - Bit
: . Resultado . Carry: . - Bit
: . Resultado . Carry: . - Bit
: (em binário ). Resultado . Carry: . - Bit
: . Resultado . Carry: . - Bit
: (em binário ). Resultado . Carry: . - Bit
(MSB, bit de sinal): . Resultado . Carry de saída (além do MSB): .
Juntando os bits do MSB ao LSB obtemos o resultado binário:
Passo 5
Interpretar o resultado em complemento de dois e verificar overflow:
- O resultado em binário é
. Como o bit de sinal (MSB) é , 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 , ou calcular a magnitude pela complementarização: Como número em complemento de dois de 8 bits, o valor é . Logo o resultado interpretado como número com sinal é . - Aplicando a regra de overflow: os dois operandos tinham bit de sinal
(eram positivos: e ), e o resultado tem bit de sinal (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
) foi e o carry que saiu do bit de sinal foi . 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
dê , em aritmética com sinal (complemento de dois) esse resultado representa , o que não é o correto valor exato da soma aritmética . O que aconteceu é que a soma “transbordou” o intervalo representável — 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
Overflow: sim.