Calculadora de complemento de dois (conversão binária de inteiros com sinal)

Converte um inteiro decimal com sinal para seu padrão binário em complemento de dois de 8/16/32/64 bits, ou realiza a conversão inversa. Também mostra a interpretação sem sinal, a notação hexadecimal e detecta valores fora do intervalo.

O que é o complemento de dois

O complemento de dois é o esquema que os computadores usam para representar inteiros com sinal — números que podem ser positivos ou negativos — como simples padrões de bits. Números positivos são armazenados como binário comum, enquanto um número negativo é formado invertendo cada bit do seu valor absoluto e somando um. O bit mais significativo (MSB) também funciona como sinal: 1 significa negativo e 0 significa positivo, e o intervalo representável depende da largura de bits escolhida (8, 16, 32 ou 64 bits).

Esta ferramenta converte um inteiro decimal com sinal para seu padrão binário em complemento de dois na largura de bits escolhida, e também pode converter no sentido contrário, de uma string binária de volta para decimal. Junto ao resultado principal, mostra a interpretação sem sinal dos mesmos bits, a notação hexadecimal e uma comparação com a representação em sinal e magnitude, para que você veja concretamente como o mesmo padrão de bits pode significar coisas diferentes dependendo de como é lido.

Como usar a calculadora de complemento de dois

  1. Escolha uma largura de bits Selecione 8, 16, 32 ou 64 bits conforme o tipo inteiro que você quer verificar.
  2. Escolha a direção da conversão Alterne entre "decimal → binário" e "binário → decimal" conforme o que você precisa converter.
  3. Digite um valor Digite um inteiro decimal com sinal (por exemplo, -5) ou uma string binária (por exemplo, 11111011).
  4. Leia o resultado da conversão O valor decimal com e sem sinal, o padrão em complemento de dois e a notação hexadecimal aparecem juntos.
  5. Confira o aviso de intervalo/overflow Digite um valor fora do que a largura de bits comporta para ver exatamente onde está o limite do overflow.

Dicas para aproveitar melhor

  • Um inteiro com sinal de 8 bits vai de -128 a 127. Experimente digitar 127 e depois 128 para ver o limite do overflow em ação: 128 não cabe e dispara o erro de intervalo, exatamente onde ocorreria a virada para -128.
  • A linha "decimal sem sinal" lê o mesmo padrão de bits sem tratar o bit mais significativo como sinal. Compará-la com a linha com sinal torna a diferença entre as duas interpretações imediatamente visível.
  • Uma entrada binária deve ter exatamente tantos dígitos quanto a largura de bits selecionada: 8 dígitos para 8 bits, 16 para 16 bits, e assim por diante.
  • Os cálculos de 64 bits usam BigInt internamente em vez do tipo Number do JavaScript, então valores próximos de 2^63 são convertidos sem perda de precisão.
  • Esta ferramenta também é útil para entender o comportamento de overflow de inteiros em linguagens como C e Java, onde os tipos int (32 bits) e long (64 bits) dão a volta exatamente nesses mesmos limites.

Usos práticos do complemento de dois

Estudar para cursos e provas de computação

Resolva à mão os exercícios de conversão binária que aparecem em praticamente toda disciplina introdutória de computação e confira suas respostas.

Depurar bugs de overflow de inteiros em C ou sistemas embarcados

Reproduza, na largura de bits real, um valor inesperado de uma variável int ou uint8_t para localizar exatamente onde o erro ocorreu.

Entender como os registradores da CPU armazenam valores

Quando um depurador mostra o valor hexadecimal de um registrador, confira rapidamente qual inteiro com sinal aquele padrão realmente representa.

Verificar resultados de operações bit a bit

Antes e depois de escrever lógica de AND/OR/deslocamento, confirme manualmente se o padrão de bits resultante é o esperado.

Glossário do complemento de dois

Complemento de dois
Uma forma de representar números negativos invertendo cada bit do valor absoluto e somando um. Dá ao zero um único padrão inequívoco e permite que o mesmo circuito somador seja usado tanto para somar quanto para subtrair, por isso quase toda CPU moderna o usa para inteiros com sinal.
Bit de sinal
O bit mais significativo (MSB) de um padrão de bits. No complemento de dois, um valor 1 indica que o número é negativo e um 0 que é positivo.
Overflow
O que acontece quando um resultado não cabe mais na largura de bits disponível. O bit de ordem mais alta excedente é descartado, o que muda o significado do bit de sinal e faz o valor parecer saltar para o extremo oposto do intervalo.
Inteiro com sinal vs. sem sinal
O mesmo padrão de bits pode representar dois valores diferentes dependendo de o bit de sinal ser tratado como marcador de números negativos (com sinal) ou apenas como mais um bit de valor (sem sinal).
Largura de bits
O número de bits usados para armazenar um inteiro. As larguras comuns são 8, 16, 32 e 64 bits: quanto mais larga, maior o intervalo de valores representável.
Complemento de um
Um esquema mais antigo que forma um número negativo apenas invertendo todos os bits do valor positivo, sem somar 1. Tem a desvantagem de produzir dois padrões distintos para o zero ("+0" e "-0"), problema que o complemento de dois foi criado para eliminar.

Perguntas frequentes

Tanto a representação de sinal e magnitude quanto a de complemento de um acabam com dois padrões de bits distintos para o zero ("+0" e "-0"), o que complica os circuitos de comparação e aritmética. O complemento de dois tem exatamente um padrão de bits para o zero e, tão importante quanto isso, o mesmo circuito somador que realiza a adição também pode realizar a subtração. Essas duas propriedades permitem que os projetistas de CPU simplifiquem a unidade lógica aritmética, razão pela qual quase todos os processadores modernos usam internamente o complemento de dois para inteiros com sinal.

De -128 a 127. Como o bit mais significativo é reservado para o sinal, existem apenas 128 padrões distintos do lado positivo (0 a 127), mas o lado negativo pode representar 128 valores distintos (-1 a -128), já que o complemento de dois tem apenas um padrão de bits para o zero, deixando um padrão extra disponível do lado negativo — daí o intervalo assimétrico.

O complemento de um forma um número negativo simplesmente invertendo cada bit do valor positivo. O complemento de dois vai um passo além e soma 1 depois de inverter. Esse passo extra elimina o "problema dos dois zeros" inerente ao complemento de um (00000000 para "+0" e 11111111 para "-0"), razão pela qual o complemento de dois se tornou o padrão.

Como a largura de bits é fixa, qualquer resultado aritmético que exceda o intervalo representável tem seu bit de ordem mais alta truncado, o que muda o significado do bit de sinal. Por exemplo, somar 1 ao máximo com sinal de 8 bits, 127, produz o padrão de bits 10000000, interpretado como -128 pelas regras com sinal. Ultrapassar o limite superior leva de volta ao limite inferior — esse salto contraintuitivo é exatamente o que é o overflow.

O padrão de bits em si não muda, mas, sem tratar o bit mais significativo como sinal, cada bit simplesmente contribui com seu valor posicional normal. Por exemplo, o padrão de 8 bits 11111011 equivale a -5 quando lido com sinal, mas a 251 quando lido sem sinal. Essa reinterpretação exata acontece na prática sempre que você usa um tipo "sem sinal", como o unsigned int do C, em um valor antes tratado como com sinal.
Tool-kun

Curiosidade — Por que os computadores usam complemento de dois

O complemento de dois não é a única forma de representar números negativos em binário. Historicamente também foram usadas a representação de sinal e magnitude (usando o bit mais significativo apenas como indicador de sinal) e o complemento de um (simplesmente invertendo os bits de um número positivo). Ambas compartilham a mesma falha: acabam com dois padrões de bits distintos para o zero, "+0" e "-0", o que complica a lógica de comparação e o design de circuitos. O complemento de dois evita completamente esse "problema dos dois zeros" — cada padrão de bits corresponde a exatamente um valor inteiro.

Uma vantagem ainda maior do complemento de dois é que o mesmo circuito somador usado na adição também pode realizar a subtração, já que subtrair um número equivale a somar seu complemento de dois. A CPU não precisa saber ou se importar se um valor é positivo ou negativo; ela apenas soma padrões de bits e obtém o resultado correto em ambos os casos. Isso permite que a unidade lógica aritmética (ULA) dispense por completo um circuito de subtração dedicado, razão pela qual praticamente todas as arquiteturas de CPU modernas adotaram o complemento de dois para inteiros com sinal.

O overflow de inteiros é uma consequência direta dessa representação. Somar 1 ao máximo com sinal de 8 bits, 127 (01111111), simplesmente faz o padrão de bits virar 10000000 — que, interpretado como valor com sinal, é -128. Em C, o overflow de inteiros com sinal é tecnicamente um comportamento indefinido, o que significa que otimizações do compilador podem produzir resultados surpreendentes perto desse limite, merecendo cuidado real em código de produção. Já o Java especifica que o overflow dá a volta silenciosamente, um exemplo interessante de como as garantias de comportamento podem diferir entre linguagens mesmo quando a representação de bits subjacente é idêntica.