Conversor de decimal para hexadecimal
Resultado
Hexadecimal
- Valores posicionais
- 2×4096 + 10×256 + 3×16 + 15
Um conversor de decimal para hexadecimal reescreve um número inteiro da base dez na base dezesseis. O método é a mesma divisão repetida que produz o binário, com dezesseis no lugar do dois: divida o número por dezesseis, guarde o resto, divida o quociente por dezesseis e siga assim até o quociente chegar a zero. O que muda é o alfabeto. Dividir por dois só pode deixar 0 ou 1, mas dividir por dezesseis pode deixar qualquer valor de 0 a 15, e a base dezesseis escreve esses valores de dez a quinze como as letras A a F — A para 10, B para 11, até F para 15. Então os restos não saem como algarismos hexadecimais direto; eles saem como números, e todo resto acima de 9 precisa ser escrito com a sua letra antes de a resposta estar pronta. Pegue 10.815: 10.815 ÷ 16 é 675 com resto 15, depois 675 ÷ 16 é 42 com resto 3, depois 42 ÷ 16 é 2 com resto 10, e por fim 2 ÷ 16 é 0 com resto 2. Lendo de baixo para cima, os restos são 2, 10, 3, 15 — que viram 2, A, 3, F, então 10.815 se escreve 2A3F em hexadecimal. As letras são o ponto todo da página. A soma de valores posicionais impressa ao lado da resposta mostra o mesmo número pelo outro extremo: na base dezesseis as casas valem 4.096, 256, 16 e 1, e 2A3F é 2×4.096 mais 10×256 mais 3×16 mais 15, o que volta a dar 10.815. A base dezesseis é usada porque um algarismo hexadecimal é exatamente quatro algarismos binários, então um byte é sempre dois caracteres e um valor de trinta e dois bits é sempre oito — e é por isso que códigos de cor, endereços de memória e hashes são escritos assim.
Dividindo 10.815 por dezesseis, uma etapa por vez, até o quociente chegar a zero
| Etapa | Divisão | Quociente | Resto |
|---|---|---|---|
| 1 | 10815 ÷ 16 | 675 | 15 (F) |
| 2 | 675 ÷ 16 | 42 | 3 |
| 3 | 42 ÷ 16 | 2 | 10 (A) |
| 4 | 2 ÷ 16 | 0 | 2 |
Dois dos quatro restos desta escada estão escritos como um número seguido da sua letra entre parênteses — 15 (F) e 10 (A) —, e essa forma dupla é a razão de a tabela existir. A conta entrega 15; a resposta precisa de F. Quem divide certo e depois copia a coluna dos restos como está escreve 2103 no lugar de 2A3F, que é o único erro que esta conversão convida a cometer. Leia a coluna de baixo para cima e os caracteres da resposta aparecem em ordem: 2, 10, 3, 15, que é 2A3F depois de os dois valores acima de nove serem substituídos. A tabela fica fixa em 10.815 enquanto o painel acima converte o que você digitou, porque ela mostra o método e não um resultado. O quociente cai por um fator de mais ou menos dezesseis a cada etapa, então a escada até para a maior entrada aceita tem apenas catorze linhas — que é exatamente o comprimento do teto hexadecimal, 1FFFFFFFFFFFFF.
Fórmula
10.815 ÷ 16 = 675 r 15 → 675 ÷ 16 = 42 r 3 → 42 ÷ 16 = 2 r 10 → 2 ÷ 16 = 0 r 2 ⇒ 10.815 = 2A3F = 2×4.096 + 10×256 + 3×16 + 15
- 10.815
- O número inteiro a converter, escrito na base dez. Um separador decimal ou um separador de milhar é recusado em vez de arredondado, então no campo de entrada escreva 10815, sem ponto e sem vírgula
- ÷ 16
- A etapa que se repete, com dezesseis no lugar do dois que a versão binária desta página usa. Dezesseis é a base para a qual você está convertendo, então cada rodada pergunta quantos dezesseis cabem e o que sobra
- quociente
- A parte que segue para a etapa seguinte. O processo para quando o quociente chega a zero, o que significa que nenhuma casa mais alta da resposta é necessária
- resto
- O algarismo produzido por aquela rodada, e aqui ele pode ser qualquer coisa de 0 a 15 em vez de apenas 0 ou 1. Apagar essa diferença é o jeito mais comum de errar esta conversão: o resto 15 não é o algarismo 15, porque a base dezesseis não tem um caractere único para ele
- A — F
- As letras que representam os valores de dez a quinze, sendo A o 10, B o 11, C o 12, D o 13, E o 14 e F o 15. Elas não são uma notação separada a aprender: cada uma é apenas o número que não pôde ser escrito com um único caractere decimal
- ⇒ 2A3F
- Os algarismos montados de baixo para cima, com todo resto acima de 9 já transformado na sua letra. O primeiro resto encontrado é o caractere mais à direita, então ler as etapas na ordem em que foram escritas dá a resposta invertida
- 2×4.096 + 10×256 + 3×16 + 15
- A resposta lida de volta como valores posicionais. Diferente do binário, os coeficientes não são todos uns — é esta a conferência que pega uma letra convertida no número errado, porque um A trocado mudaria a soma. A página imprime essa soma como texto, sem ponto de milhar, então o 4.096 que você lê aqui aparece lá como 4096
Hexadecimal é a taquigrafia que os engenheiros leem, então esta conversão aparece sempre que um valor precisa passar de uma forma para a outra. Códigos de cor são o caso do dia a dia: um canal que vai de 0 a 255 são dois caracteres hexadecimais, e é por isso que uma cor se escreve com seis deles e que o 10.815 de um designer e o 2A3F de um programador são a mesma cor. Endereços de memória, somas de verificação, hashes e os valores de registrador de uma folha de dados são todos impressos na base dezesseis pelo mesmo motivo — quatro bits por caractere, então a largura de um valor fica legível de relance. Quem lê uma pilha de erro ou um despejo de pacotes faz esta conversão na direção contrária dezenas de vezes por hora, e quem escreve uma máscara ou um número mágico a faz nesta direção. Trabalhos escolares pedem isso diretamente, quase sempre como converta de decimal para hexadecimal e mostre o cálculo, e é exatamente isso que a escada abaixo é: uma linha por divisão, com as letras já substituídas. É também o passo que torna óbvia a largura de um valor, porque dois caracteres são um byte e oito são uma palavra de trinta e dois bits, então a conversão responde quantos caracteres um valor vai ocupar no formato para o qual ele está indo.
Exemplos resolvidos
Escrevendo 10.815 em hexadecimal
- 10.815 ÷ 16 = 675, resto 15 — anote 15, que é F
- 675 ÷ 16 = 42, resto 3
- 42 ÷ 16 = 2, resto 10 — que é A
- 2 ÷ 16 = 0, resto 2 — o quociente chegou a zero, então pare
- Leia os restos de baixo para cima: 2, 10, 3, 15
- Troque 10 por A e 15 por F: a resposta é 2A3F
O caso padrão, e o exemplo que mostra as duas substituições. Repare que dois dos quatro restos precisaram de letra, o que é típico e não azar: um resto acima de 9 aparece mais ou menos seis vezes em dezesseis, e uma resposta de três ou quatro caracteres quase sempre vai conter pelo menos um.
Um byte completo, 255
- 255 ÷ 16 = 15, resto 15 — escreva F
- 15 ÷ 16 = 0, resto 15 — escreva F
- O quociente chegou a zero, então leia os dois restos de baixo para cima: FF
Dois caracteres para o maior valor que um byte comporta, que é exatamente a razão de a base dezesseis existir. Vale decorar o par FF e 255: ele é o teto de um canal de cor, de um byte sem sinal na maioria das linguagens e de um caractere de dado bruto.
Uma potência de dezesseis, 1.048.576
- 1.048.576 ÷ 16 = 65.536, resto 0
- 65.536 ÷ 16 = 4.096, resto 0
- 4.096 ÷ 16 = 256, resto 0
- 256 ÷ 16 = 16, resto 0
- 16 ÷ 16 = 1, resto 0
- 1 ÷ 16 = 0, resto 1 — leia de baixo para cima para chegar a 100000
O eco em hexadecimal do exemplo da potência de dois na página binária: uma potência da base sai como um único 1 seguido de zeros. 1.048.576 é 16⁵ e também 2²⁰, e é isso que a notação resolve — o mesmo valor é 100000000000000000000 em binário e 100000 em hexadecimal, e o segundo é legível.
Um número negativo
- O sinal de menos é transportado, não convertido: os algarismos são calculados para 10.815 como no primeiro exemplo
- 10.815 ÷ 16 = 675, resto 15, e assim por diante até 0 com resto 2
- Os algarismos lidos de baixo para cima são 2, A, 3, F
- O sinal vai na frente: −2A3F
Um sinal de menos na frente é aceito e impresso adiante, e a soma de valores posicionais fica entre parênteses para que o menos se aplique à soma inteira e não ao primeiro termo dela. Repare no que isto não é: é uma leitura com sinal de um módulo, e não o padrão de bits em complemento de dois que uma máquina guardaria. Se você precisa do conteúdo de um registrador para um valor negativo, e não da notação com sinal, essa é outra pergunta e outra página.
Limitações
Esta página converte apenas números inteiros, então um separador decimal é recusado em vez de arredondado — 10815.5 não pode ser convertido aqui. Separadores de milhar também são recusados no campo de entrada: escreva 10815, não 10.815, porque o ponto seria lido como separador decimal, e adivinhar entre as duas leituras é pior do que perguntar sem rodeios. Vale notar que isso vale só para o campo: na prosa desta página os números aparecem na convenção brasileira, com ponto de milhar, como em 10.815 — no campo, porém, o ponto nunca é aceito, porque ali ele só poderia significar separador decimal. A entrada pode ter no máximo 9.007.199.254.740.991, que dá catorze caracteres hexadecimais, e sua forma hexadecimal é 1FFFFFFFFFFFFF — o mesmo teto que aparece nas páginas binárias como 53 algarismos, porque é um único limite escrito em duas bases. Zeros à esquerda e um sinal de menos na frente são aceitos; o menos produz uma leitura com sinal do módulo, e não um padrão de bits em complemento de dois. A tabela abaixo imprime a escada de 10.815 e não acompanha o número digitado. Converter na direção oposta, de hexadecimal de volta para decimal, é uma página separada, e esta não faz nenhuma conta sobre o resultado. As duas saídas — a forma hexadecimal e a soma de valores posicionais — são impressas como texto, caractere por caractere, sem separador de milhar: a separação de milhar existe na prosa, que escreve 4.096, e não na resposta impressa, que mostra 4096.
Perguntas frequentes
- Como eu converto um número decimal para hexadecimal à mão?
- Divida por dezesseis, anote o resto, depois divida o quociente por dezesseis e repita até o quociente ser zero. Leia os restos de baixo para cima e troque todo resto acima de 9 pela sua letra: 10 é A, 11 é B, 12 é C, 13 é D, 14 é E e 15 é F. Para 10.815 os restos saem 15, 3, 10, 2 de cima para baixo, o que lido para cima e substituído dá 2A3F.
- Por que existem letras na base dezesseis?
- Porque a base dezesseis precisa de dezesseis caracteres únicos e os algarismos decimais só fornecem dez. Os seis símbolos que faltam têm de vir de algum lugar, e as letras são a convenção com que todo sistema concorda. A é dez e F é quinze, então os algarismos do sistema vão de 0 a 9 e depois de A a F. Isso não é uma coisa extra para decorar por cima da conversão — uma letra é sempre apenas o nome de um resto que não coube num único caractere decimal.
- Qual é o maior número decimal que posso converter aqui?
- 9.007.199.254.740.991, que é 1FFFFFFFFFFFFF em hexadecimal — catorze caracteres. O limite vem do mesmo lugar que o limite de 53 algarismos nas páginas binárias, porque é o mesmo número escrito em duas bases. Qualquer coisa maior é recusada com uma mensagem em vez de convertida, já que acima dessa largura uma máquina não consegue manter inteiros vizinhos separados e uma resposta convertida não poderia ser confiada.
- A base dezesseis é a mesma coisa que o binário, só mais curta?
- É o mesmo valor escrito numa base que é potência de dois, e é por isso que passar de uma para a outra é tão fácil. Cada caractere hexadecimal é exatamente quatro algarismos binários, então 2A3F é 0010 1010 0011 1111 sem sobrar nada. Isso não é coincidência deste exemplo: vale para todo número hexadecimal, e é a razão de a base dezesseis ser usada. Nada se perde na troca e nada precisa ser arredondado.
- Posso converter um número decimal com parte fracionária?
- Aqui não. Esta página aceita números inteiros, então 10815.5 é recusado em vez de arredondado. As frações na base dezesseis são bem definidas — as posições à direita do ponto valem um dezesseis avos, um duzentos e cinquenta e seis avos, e assim por diante —, mas aceitá-las exigiria decidir quantos caracteres manter e como arredondar o último, e todas as páginas deste grupo convertem números inteiros.
- Por que a página imprime uma soma de valores posicionais além do número hexadecimal?
- Porque é a conferência que pega o erro de substituição. Se você transformou o resto 15 na letra errada, ou usou A onde precisava de F, a soma impressa não vai voltar ao número com que você começou — 2×4.096 + 10×256 + 3×16 + 15 só dá 10.815 quando as letras foram lidas corretamente. Diferente da versão binária dessa soma, os coeficientes não são todos uns, então cada caractere da resposta responde por uma parcela própria.
Referências
- Hexadecimal — base sixteen, the letters A to F as the values ten to fifteen, and conversion to and from decimal — Wolfram MathWorld (United States)
- Number base — why a numeral's value depends on its position and on the base, and how one quantity is written in several bases — Wolfram MathWorld (United States)
- Powers of two — the sequence that the base-sixteen positions double up into, catalogued as OEIS A000079 — OEIS Foundation Inc. (United States)