Desenvolvimento

Conversor de binário, hexadecimal, octal e decimal

Digite em qualquer campo e os outros se atualizam. A conversão usa inteiros de precisão arbitrária, então um número de 200 dígitos volta exato em vez de arredondado, que é justamente onde a maioria dos conversores rápidos desiste em silêncio.

8Bits
1Bytes
3Dígitos decimais
uint8Menor tipo

De 2 a 36. Os dígitos vão de 0 a 9 e depois de a até z.

Largura fixa e complemento de dois
LarguraArmazenado como hexLido como sem sinal

O que uma base é de verdade

Todo sistema de numeração posicional funciona do mesmo jeito: cada casa vale a base vezes a casa à sua direita. Em decimal, 255 significa duas centenas, cinco dezenas e cinco unidades. Em binário, 11111111 significa uma unidade de cada potência de dois de 128 até 1, o que dá os mesmos 255. A quantidade não muda em nada. Só a notação muda.

O hexadecimal existe por um único motivo: 16 é 2 elevado à quarta, então um dígito hexadecimal corresponde a exatamente quatro bits e nunca fica no meio de dois grupos. Isso faz com que FF e 11111111 sejam mecanicamente intercambiáveis, um dígito por vez, sem nenhuma conta. É por isso que os dumps de memória, os códigos de cor e os endereços MAC são todos escritos em hexadecimal: é binário que dá para ler em voz alta.

O octal agrupa três bits em vez de quatro. Ele sobrevive principalmente nas permissões de arquivo do Unix, onde chmod 755 são três dígitos octais, cada um com três bits de permissão: 7 é 111, leitura, escrita e execução; 5 é 101, leitura e execução, sem escrita. Depois que você enxerga os bits, os números deixam de parecer arbitrários.

Por que esta ferramenta não usa parseInt

O jeito óbvio de montar um conversor de bases no navegador é parseInt(s, base) e Number.prototype.toString(base). Os dois passam por um ponto flutuante de precisão dupla, que guarda inteiros de forma exata só até 2 elevado à 53, cerca de 9,007 quatrilhões. Daí para cima, os dígitos são trocados em silêncio pelos do valor representável mais próximo.

A demonstração famosa é que 9007199254740993 não pode ser representado de jeito nenhum, então um conversor feito assim devolve 9007199254740992 sem reclamar. Esta ferramenta analisa e divide com BigInt, dígito por dígito, então um hash, um UUID lido como inteiro ou um valor de teste de 300 dígitos são convertidos de forma exata. Não há limite além de quanto tempo você está disposto a esperar.

Complemento de dois, e por que existe um negativo a mais

O hardware não tem sinal de menos. Um inteiro com sinal de largura fixa guarda os negativos dando a volta: em 8 bits, -1 é guardado como 255, que é FF. A regra é pegar o valor módulo 2 elevado à largura e ler o bit mais alto como o sinal. Essa única convenção deixa o mesmo circuito de soma dar conta de números com e sem sinal, e é exatamente por isso que ela venceu.

Ela também explica uma assimetria que pega muita gente de surpresa. Um inteiro com sinal de 8 bits vai de -128 a 127, não de -128 a 128. O zero ocupa uma das vagas positivas, então existe exatamente um valor negativo a mais do que positivos. Negar o número mais negativo estoura e volta para ele mesmo. O painel acima mostra como o valor atual fica em 8, 16, 32 e 64 bits, e diz com todas as letras quando ele não cabe.

Base64 não é base 64

Apesar do nome, Base64 não é um sistema de numeração posicional, e esta ferramenta não gera esse formato. É uma codificação de binário para texto: ela pega três bytes, divide os 24 bits em quatro grupos de seis e mapeia cada grupo para um de 64 caracteres imprimíveis. Ela opera sobre um fluxo de bytes, não sobre o valor de um número, e é por isso que o codificador Base64 é uma coisa completamente separada.

O que esta ferramenta não faz

Perguntas frequentes

Como converto binário para hexadecimal na mão?

Divida o binário em grupos de quatro bits começando pela direita, complete o grupo da esquerda com zeros e escreva cada grupo como um dígito hexadecimal. 11111111 vira 1111 1111, que é F e F, ou seja FF. Funciona porque 16 é exatamente 2 elevado à quarta.

Ele lida com números maiores que 2^53?

Sim, de forma exata e com qualquer quantidade de dígitos. A conversão usa aritmética BigInt em vez de parseInt, que passa por um ponto flutuante e começa a perder dígitos acima de cerca de 9 quatrilhões. Cole um número de 100 dígitos e todos eles voltam.

Por que o chmod usa octal?

Porque as permissões vêm em grupos de três bits: leitura, escrita e execução. Um dígito octal é exatamente três bits, então 755 é 111 101 101, ou seja acesso completo para o dono e leitura mais execução para todos os demais.

Dá para converter decimais como 3.75 para binário?

Não, só inteiros. A maioria das frações não termina em binário, então a resposta teria que ser cortada em algum ponto arbitrário. Essa expansão que se repete é também o motivo de 0.1 mais 0.2 não dar exatamente 0.3 na maioria das linguagens de programação.

Base64 é a mesma coisa que base 64?

Não. Base64 é uma codificação de texto que mapeia cada seis bits de um fluxo de bytes para um caractere imprimível. Ela não trata a entrada como um número, então um conversor de bases não consegue produzi-la.

Última atualização 19 de setembro de 2026