Também disponível em: English · Español · Français · العربية
Conversor de bases numéricas
Binário, octal, decimal, hexadecimal e tudo até à base 36, incluindo a parte fracionária calculada exatamente e com os algarismos periódicos assinalados.
O que é um conversor de bases
A base é com quantos algarismos se conta antes de transportar. O decimal tem dez, o binário dois e o hexadecimal dezasseis, usando de a a z quando os algarismos acabam. O número em si nunca muda; muda apenas a sua escrita. O vinte e cinco é 25 em decimal, 11001 em binário e 19 em hexadecimal, e as três são a mesma quantidade.
Converter números inteiros é mecânico e qualquer calculadora acerta. O interessante aparece com as frações, porque o facto de uma fração ter um fim limpo não é uma propriedade do número: é uma propriedade da base em que se escreve.
Este conversor faz as duas coisas e calcula a parte fracionária de forma exata. Se o desenvolvimento for infinito, di-lo e mostra o período entre parênteses, em vez de arredondar a um número arbitrário de casas e deixar que suponha que era essa a resposta.
Como usar o conversor
- Escreva o seu valor. Algarismos de 0 a 9 e depois de a a z, com sinal de menos opcional e parte fracionária opcional. Um algarismo que a base de origem não tem é recusado em vez de ser mal lido em silêncio: o 2 não é um algarismo binário, e tratá-lo como tal daria uma resposta confiante e errada.
- Defina as duas bases. Qualquer uma de 2 a 36, escrevendo um número ou com os botões rápidos de 2, 8, 10 e 16. «Trocar» inverte-as e leva o resultado consigo quando é exato.
- Leia o resultado e o que ele diz. Por baixo da resposta, o painel indica se o valor termina nessa base, quantos algarismos tem o período se não terminar, e de que primos a base é feita — o dado que decide tudo.
Um número terminar é um facto sobre a base
Tudo isto é regido por uma única regra: uma fração irredutível termina na base b exatamente quando todos os fatores primos do seu denominador dividem também b. O decimal termina com os décimos, os oitavos e os quarenta avos porque 10 = 2 × 5 e esses denominadores são feitos de dois e cincos. Não termina com os terços, porque o 3 não está entre eles.
A consequência é mais interessante do que a regra. O binário, o octal e o hexadecimal partilham um único fator primo, o 2, por isso **terminam exatamente nas mesmas frações**. Converter um valor de binário para hexadecimal nunca transforma um desenvolvimento periódico num limpo, o que foi verificado aqui em cinco mil denominadores sem uma única exceção. Isso contraria a sensação comum de que o hexadecimal é de algum modo mais fino ou mais preciso do que o binário: para este efeito são indistinguíveis.
Contando os denominadores de 1 a 10 000 que dão um desenvolvimento exato: a base 2 consegue **14**, e o mesmo a base 8 e a 16 — os mesmos catorze. A base 10 chega a 48, e só porque traz o primo 5. A base 12 chega a 67, porque ter o 3 é mais útil do que ter o 5, que é todo o argumento duodecimal resumido num número.
O exemplo que toda a gente encontrou sem lhe explicarem porquê é o 0,1. Em decimal é exato por construção. Em binário é **0,0(0011)** — os quatro algarismos 0011 repetidos sem fim — que é precisamente a razão de a vírgula flutuante binária não conseguir guardar um décimo e de 0,1 + 0,2 falhar 0,3. Em hexadecimal é 0,1(9), periódico pela mesma razão. Já um terço, o exemplo clássico de número que «não dá certo», é exatamente **0,1** na base 3.
Limitações assumidas
Um período pode ser larguíssimo — até ao denominador menos um — por isso uma fração com denominador grande pode repetir-se durante milhares de algarismos. Esta página calcula até dois mil e para, e diz que parou em vez de apresentar um desenvolvimento cortado como se fosse a resposta inteira.
As bases vão de 2 a 36 porque é até aí que chega um símbolo por letra. A base 37 precisaria de um trigésimo sétimo símbolo e não há nenhum acordado, por isso, em vez de inventar notação, a ferramenta abstém-se. Os algarismos não distinguem maiúsculas de minúsculas, porque aqui essa diferença não significa nada.
Isto é aritmética racional exata, não vírgula flutuante, por isso o valor que escreve é o valor que é convertido. Isso implica também que discordará da conversão incorporada de uma linguagem de forma específica: `parseFloat` sobre 0,1 dá o double mais próximo, que não é um décimo, pelo que um conversor construído sobre ele mostraria o desenvolvimento binário desse double e não o do número que escreveu. Aqui obtém o desenvolvimento daquilo que realmente escreveu.
O motor tem 57 verificações. As duas que contam são idas e voltas, não tabelas de respostas esperadas: todo o desenvolvimento finito, escrito noutra base e relido, tem de devolver a mesma fração exata; e todo o desenvolvimento periódico tem de se reconstruir até ao valor de que saiu, com a fórmula padrão calculada de forma independente no teste. A regra de terminação é confrontada com outra formulação do mesmo facto — se alguma potência da base divide o denominador — em 3200 casos.
Porque é gratuito
É divisão e multiplicação longas, a correr no seu navegador enquanto escreve. Nada é enviado, não há conta e não há limite.
Se quiser ver a mesma ideia em decimais correntes, a calculadora de frações deste site assinala os períodos da mesma maneira: é a mesma técnica com a base fixada em dez.