Calculadora de Complemento de Dois
Entradas
| Direção | Decimal → Binário |
|---|---|
| Largura em bits | 8 bits |
| Valor decimal | -42 |
| Entrada binária | 11010110 |
Calculadora de Complemento de Dois
Converta um inteiro com sinal para sua representação em complemento de dois (binário e hexadecimal), ou decodifique uma cadeia binária para o valor decimal com sinal. Suporta registradores de 8, 16, 32 e 64 bits.
Entradas
Entrada
Resultados
Insira um valor para ver os resultados.
Representação
Complemento de dois
O complemento de dois é o método padrão pelo qual os computadores digitais armazenam e operam com inteiros com sinal. Todas as arquiteturas de processador amplamente utilizadas — x86, ARM, RISC-V, MIPS — adotam o complemento de dois para as unidades de aritmética inteira, pois a codificação permite que a subtração seja realizada pelo mesmo circuito que a adição e produz exatamente um único padrão de bits para o zero.
O esquema de codificação
Um registrador de N bits em complemento de dois comporta padrões de bits distintos. Metade desses padrões representa inteiros não negativos ( a ), e a outra metade representa inteiros negativos ( a ). A propriedade fundamental é que o bit mais significativo (o bit mais à esquerda) funciona como bit de sinal: 0 para valores não negativos e 1 para valores negativos.
Para inteiros não negativos, a codificação é idêntica ao binário sem sinal convencional. O número 42 em um registrador de 8 bits, por exemplo, é:
Calculando o complemento de dois de um número negativo
Para obter a codificação em complemento de dois de um inteiro negativo (com ) em um registrador de N bits, some ao valor:
Para em 8 bits: . Escrito em binário e agrupado em nibbles:
21410=110101102=0xD6Um procedimento prático alternativo consiste em inverter todos os bits da representação positiva e somar 1:
- Inverta os bits:
- Some 1: ✓
Os dois métodos produzem o mesmo resultado.
Lendo um valor em complemento de dois
Para converter uma cadeia binária em complemento de dois de volta ao decimal com sinal, basta examinar o bit de sinal:
- Se o bit mais significativo for 0, o valor é não negativo. Interprete-o como binário sem sinal: .
- Se o bit mais significativo for 1, o valor é negativo. Subtraia da interpretação sem sinal: , portanto .
Intervalos representáveis
O bit de sinal divide ao meio o intervalo sem sinal. Um registrador de N bits representa:
| Largura em bits | Mínimo | Máximo |
|---|---|---|
| 8 bits | −128 | 127 |
| 16 bits | −32.768 | 32.767 |
| 32 bits | −2.147.483.648 | 2.147.483.647 |
| 64 bits | −9.223.372.036.854.775.808 | 9.223.372.036.854.775.807 |
A assimetria é inevitável: há sempre um valor negativo representável a mais do que valores positivos. Isso ocorre porque o zero ocupa um dos slots não negativos, deixando valores estritamente positivos ao lado de valores negativos.
Transbordamento (overflow)
Quando um resultado aritmético ultrapassa os limites do intervalo representável, o valor sofre uma "virada" — fenômeno denominado transbordamento ou overflow. Em um registrador de 8 bits, somar 1 a 127 produz , que é a codificação de −128. Os processadores geralmente ativam um sinalizador de overflow para que o software possa detectar e tratar essa condição; a operação em si é uma adição modular sobre os bits.
Sinal-magnitude versus complemento de dois
Uma codificação alternativa, denominada sinal-magnitude, reserva um bit exclusivo para o sinal e utiliza os N−1 bits restantes para o valor absoluto. Essa representação apresenta dois problemas. Primeiro, existem dois padrões de bits para o zero: zero positivo () e zero negativo (), o que exige tratamento especial nas comparações. Segundo, a adição de números com sinais diferentes requer lógica adicional para determinar qual operando é maior e se a operação deve ser adição ou subtração. O complemento de dois resolve ambos os problemas: um único circuito somador trata todos os casos, e o zero possui exatamente uma representação ().
Perguntas frequentes (FAQ)
Por que o complemento de dois é usado em vez da representação sinal-magnitude?
A representação sinal-magnitude armazena o sinal em um bit separado e o valor absoluto nos bits restantes. Isso cria dois padrões de bits para o zero (zero positivo e zero negativo) e exige circuitos distintos para adição e subtração.
O complemento de dois elimina os dois problemas: o zero possui exatamente um único padrão de bits, e o mesmo circuito somador opera corretamente tanto com números positivos quanto negativos, sem casos especiais. Por essa simplicidade, todos os processadores modernos utilizam o complemento de dois para aritmética de inteiros.
Qual é o intervalo de um inteiro com sinal de 8 bits?
Um inteiro em complemento de dois de 8 bits representa 256 valores distintos: de −128 a 127. O valor mais negativo (−128) corresponde ao padrão de bits 10000000, em que o 1 inicial indica valor negativo. O valor mais positivo (127) corresponde a 01111111. A assimetria — um valor negativo extra — ocorre porque o zero ocupa um dos slots não negativos.
Para qualquer registrador de N bits, o intervalo é de −2^(N−1) a 2^(N−1) − 1: para 16 bits, isso equivale a −32.768 a 32.767; para 32 bits, a −2.147.483.648 a 2.147.483.647.