Pular para o conteúdo
Novo

Conversor de Bases

Digite em qualquer uma das quatro bases e veja as outras três na hora. Exato em qualquer tamanho — inclusive nos valores de 64 bits, onde a conta comum do JavaScript erra sem avisar.

Digite um número em qualquer uma das bases.

Processamento 100% local: seus números não saem do seu dispositivo.

Como funciona

  1. Digite o número em qualquer um dos quatro campos.
  2. Os outros três se atualizam na hora, sem botão.
  3. Pode digitar com espaços: 1111 1111 funciona.

Por que a conta comum erra, e onde

A forma óbvia de converter base em JavaScript é parseInt, e ela erra em silêncio acima de 9.007.199.254.740.991 — o maior inteiro que o formato de ponto flutuante representa sem perda. Estes são os números reais, e você pode reproduzi-los no console do seu navegador:

  • FFFFFFFFparseInt devolve 4294967295, e o correto é 4294967295 — confere.
  • FFFFFFFFFFFFparseInt devolve 281474976710655, e o correto é 281474976710655 — confere.
  • FFFFFFFFFFFFFFFFparseInt devolve 18446744073709552000, e o correto é 18446744073709551615erra.
  • 1234567890ABCDEFparseInt devolve 1311768467294899700, e o correto é 1311768467294899695erra.

Repare que o valor errado tem a mesma ordem de grandeza e o mesmo número de dígitos do certo. Não há nada na tela que denuncie o erro — é por isso que ele passa. E dezesseis dígitos hexadecimais não é caso exótico: é o tamanho de um inteiro de 64 bits, que aparece em identificador, hash truncado e endereço de memória.

Aqui a conta usa aritmética de precisão arbitrária. Não há teto de tamanho e não há arredondamento: um binário de duzentos dígitos converte exato.

O que esta ferramenta recusa, em vez de adivinhar

parseInt também tenta adivinhar quando devia recusar — parseInt('0.9') devolve 0, e parseInt('12abc') devolve 12. Aqui:

  • Dígito que não existe na baseFF em decimal é recusado, e a mensagem diz qual dígito é o problema.
  • Entrada em parte válida12abc é recusado por inteiro, não aparado até onde dava.
  • Número com vírgula — recusado com mensagem própria, porque é outro problema seu, não um dígito errado.

Fracionários e complemento de dois ficam de fora

Fracionários, porque um décimo em decimal é dízima infinita em binário — 0,000110011001100… — e qualquer saída seria um truncamento apresentado como valor exato.

Complemento de dois, porque a resposta dele depende de uma largura que você teria de escolher: −1 é FF em 8 bits, FFFF em 16 e FFFFFFFF em 32. Sem largura não existe resposta única, e presumir uma seria inventar. Negativos aparecem com sinal.

Perguntas frequentes

Por que outra ferramenta me dá um resultado diferente?

Provavelmente porque ela usa a conta comum do JavaScript, que perde precisão acima de 9.007.199.254.740.991. Um hexadecimal de 16 dígitos — o tamanho de um inteiro de 64 bits — passa desse limite, e o resultado sai arredondado: “FFFFFFFFFFFFFFFF” vira 18446744073709552000 em vez de 18446744073709551615. O erro é pequeno em proporção e invisível a olho nu, o que o torna pior. Aqui a conta usa aritmética de precisão arbitrária, sem teto.

Converte números com vírgula?

Não, e é de propósito. Um décimo em decimal vira dízima infinita em binário: 0,000110011001100… Qualquer resultado seria um truncamento apresentado como se fosse o valor exato, que é exatamente o defeito que esta ferramenta existe para evitar. Números com vírgula são recusados com mensagem própria, não arredondados em silêncio.

E números negativos em binário?

Aparecem com sinal: −255 vira −11111111. Não usamos complemento de dois, porque a resposta dele muda com a largura escolhida — −1 é FF em 8 bits, FFFF em 16 e FFFFFFFF em 32. Sem escolher a largura não existe resposta única, e presumir uma seria inventar informação.

Posso digitar com espaços?

Pode. “1111 1111” funciona, e pontos e sublinhados também — separador é ruído visual, não dado, e some antes da conta. O binário sai agrupado de quatro em quatro para leitura, mas o valor que você copia vai sem separador, para outra ferramenta aceitar.

Hexadecimal em maiúsculas ou minúsculas?

A entrada aceita as duas: “ff” e “FF” são o mesmo valor. A saída usa maiúsculas, que é a convenção em documentação, identificador e endereço de memória.

Os números que eu digito ficam salvos?

Não. Toda a conversão acontece no seu navegador, nada é enviado para os nossos servidores e nada fica gravado: ao recarregar a página, os campos voltam vazios.

É gratuito?

Sim. Todas as ferramentas do PortaTreco são gratuitas e não exigem cadastro.