Conversor de hexadecimal a decimal
Resultado
Decimal
- Valores posicionales
- 2×4096 + 10×256 + 3×16 + 15
Este conversor de hexadecimal a decimal reescribe en base diez un número escrito en base dieciséis, y a diferencia de la conversión a binario sí es aritmética de verdad. El valor de un número hexadecimal es la suma de cada carácter multiplicado por la potencia de dieciséis que vale su posición, contando desde cero por la derecha. 2A3F tiene una F en el último lugar, así que la F vale 15; un 3 en el lugar siguiente, que vale 3×16; una A en el de después, que vale 10×256; y un 2 delante, que vale 2×4096. Sumándolo todo sale 10815. Las letras son donde esto se estropea, y se estropea de dos maneras. La primera, que la A tiene que convertirse en 10 y la F en 15 antes de multiplicar nada: leer la A como 1 da una respuesta que parece verosímil y está mal. La segunda, que el valor que representa una letra se multiplica por su posición, así que una F en el último lugar es 15 y una F un lugar a la izquierda es 240; la letra no es la cantidad, es un coeficiente. El valor posicional de cada carácter es la potencia de dieciséis que le toca, y las potencias son la otra mitad de la página, con una forma que merece la pena conocer: 1, 16, 256, 4096, 65536, y así hacia arriba, cada una dieciséis veces la anterior. Leer un número hexadecimal contra esa lista, de derecha a izquierda, es más rápido que calcular ninguna de las potencias en el momento. Como dieciséis es una potencia de dos, estas son además las potencias de dos tomadas de cuatro en cuatro —16 es 2⁴, 256 es 2⁸, 65536 es 2¹⁶—, y por eso las mismas posiciones que contienen cuatro bits cada una llevan una potencia de dieciséis cada una. La página imprime la suma entera junto a la respuesta, para que el resultado se pueda comprobar término a término: 2×4096 + 10×256 + 3×16 + 15 es 10815, y un error en un solo carácter aparece como una suma que no vuelve al número que esperabas.
Las potencias de dieciséis, desde la posición de la derecha hasta la más ancha que alcanza una entrada aceptada
| Posición | Potencia | Valor |
|---|---|---|
| 13 | 16¹³ | 4503599627370496 |
| 12 | 16¹² | 281474976710656 |
| 11 | 16¹¹ | 17592186044416 |
| 10 | 16¹⁰ | 1099511627776 |
| 9 | 16⁹ | 68719476736 |
| 8 | 16⁸ | 4294967296 |
| 7 | 16⁷ | 268435456 |
| 6 | 16⁶ | 16777216 |
| 5 | 16⁵ | 1048576 |
| 4 | 16⁴ | 65536 |
| 3 | 16³ | 4096 |
| 2 | 16² | 256 |
| 1 | 16¹ | 16 |
| 0 | 16⁰ | 1 |
Catorce filas, desde 16⁰ hasta 16¹³, y la longitud no es arbitraria: catorce caracteres es la entrada más ancha que acepta esta familia, así que la tabla cubre todas las posiciones que puede usar una respuesta y se detiene. Leerla hacia abajo es leer las posiciones de la respuesta de derecha a izquierda: la última fila es el carácter de más a la derecha y la primera es el de más a la izquierda. La columna del medio es la posición escrita como potencia, que es por lo que multiplica la suma del panel de arriba; la tercera columna es esa potencia ya calculada, que es por lo que se multiplica en la práctica. Estos valores se emparejan con los de las páginas binarias: 16 es 2⁴, 256 es 2⁸ y 65536 es 2¹⁶, porque un carácter hexadecimal contiene cuatro bits. Así que la misma tabla responde cuánto vale un grupo de cuatro bits cuando se lee como número y no como bits. Es fija y no sigue lo que hayas tecleado.
Fórmula
2A3F = 2×16³ + 10×16² + 3×16¹ + 15×16⁰ = 2×4096 + 10×256 + 3×16 + 15 = 10815
- 2A3F
- El número hexadecimal que hay que convertir. Las letras no distinguen mayúsculas, así que 2a3f y 2A3F son el mismo valor; un cero delante no cambia nada y un signo menos delante da un resultado negativo
- 16ⁿ
- La potencia de dieciséis asociada a una posición, contada desde cero en el carácter de la derecha. El de más a la derecha vale 16⁰, que es 1, el siguiente 16¹, que es 16, y cada paso a la izquierda vuelve a multiplicar por dieciséis
- 2, 10, 3, 15
- Los caracteres leídos como valores, con las letras ya sustituidas: la A se convierte en 10 y la F en 15 antes de que ocurra ninguna multiplicación. Leer la A como 1 es el error que esta línea existe para evitar, y es la manera más común de que esta conversión salga mal
- 2×4096
- Un término de la suma: el valor del carácter por la potencia de su posición. Cada carácter aporta un término, incluidos los que son cero, aunque un término nulo no cambia nada y simplemente se deja fuera de la suma impresa
- = 10815
- El total de los términos. Es un número decimal y no una cadena de dígitos en otra base, y por eso la respuesta de esta página se puede usar directamente en más aritmética
- 14 caracteres
- La entrada más ancha que se acepta, que es 1FFFFFFFFFFFFF. Catorce caracteres es la longitud a la que el valor llega a 9.007.199.254.740.991, por encima de la cual una máquina no puede mantener separados los enteros vecinos, así que una entrada más larga se rechaza en lugar de convertirse
Leer un valor hexadecimal como valor decimal es lo que se hace siempre que un número escrito para una máquina tiene que compararse con un número escrito para una persona. Un código de color tiene tres canales de dos caracteres cada uno, y saber que FF es 255 y que 80 es 128 es la diferencia entre ajustar un tono a ojo y ajustarlo con un número. Con los tamaños pasa lo mismo: 400 en hexadecimal es 1024, que es un tamaño de página conocido, y un mapa de memoria impreso como 0x100000 son 1048576 bytes para quien tiene que añadirle una segunda región. Quien comprueba una suma de verificación, compara el prefijo de un hash o convierte la máscara de una hoja de datos hace esta conversión, y quien lee un número de serie o un identificador que resultó ser hexadecimal también. En un curso se pide como pasar de hexadecimal a decimal, normalmente con las potencias escritas, que es exactamente la suma que imprime esta página: un término por carácter, con las letras ya sustituidas. También es la conversión a la que echar mano cuando hay que comprobar a ojo una respuesta hexadecimal que viene de otra herramienta, porque el total decimal es el único número contra el que se pueden comparar todos los demás.
Ejemplos resueltos
Leer 2A3F
- Escribe las potencias de dieciséis debajo de los cuatro caracteres, empezando por la derecha: 1, 16, 256, 4096
- Sustituye las letras por sus valores: A es 10 y F es 15
- Multiplica cada una: 2×4096 es 8192, 10×256 es 2560, 3×16 es 48, 15×1 es 15
- Suma los cuatro términos: 8192 + 2560 + 48 + 15 = 10815
El valor por defecto, y el caso en el que las dos letras hay que convertirlas. La A no es un 1 ni la F un 5: leer la cadena como si las letras fueran cifras daría una respuesta de unos dos mil, que se aleja lo bastante como para ser evidente. El error más sutil es una letra bien convertida pero multiplicada por la potencia equivocada.
Un byte completo, FF
- Dos caracteres, así que las posiciones valen 16 y 1
- F es 15, así que el carácter de la izquierda aporta 15×16 = 240
- El carácter de la derecha aporta 15×1 = 15
- 240 + 15 = 255
Dos caracteres y el valor más grande que pueden contener, y esa es la razón de que FF sea 255 y no 256: el rango empieza en 00. Este par merece memorizarse sin más, porque aparece en los valores de color, en los campos de tamaño de un byte y en cualquier cadena hexadecimal de exactamente dos caracteres.
Leer B2
- B es 11, así que el carácter de la izquierda aporta 11×16 = 176
- El carácter de la derecha aporta 2
- 176 + 2 = 178
La B está una por encima de la A, así que es 11×16 y no 10×16: la diferencia entre leer la B como 11 y leerla como 10 son dieciséis, que es un lugar hexadecimal entero. Este es el mismo valor que las páginas binarias usan como ejemplo de ocho bits, y 10110010 es su aspecto en base dos.
La entrada más grande, 1FFFFFFFFFFFFF
- Catorce caracteres, así que las posiciones van de 16¹³ hasta 16⁰
- El 1 de delante vale 16¹³, que es 4503599627370496
- Cada uno de los trece caracteres F es 15, multiplicado por la potencia de su propia posición
- Sumando los catorce términos sale 9007199254740991
Catorce términos es lo más ancha que llega esta suma, y es el mismo techo con el que las páginas decimales topan en 9.007.199.254.740.991 y las binarias en cincuenta y tres dígitos. Del método no cambia nada a este tamaño —es el mismo multiplicar y sumar, repetido catorce veces—, que es lo aprovechable del ejemplo.
Limitaciones
La entrada de aquí es una cadena hexadecimal y no una decimal, así que no hay ningún punto decimal que rechazar: lo que se rechaza son los caracteres que no estén entre el 0 y el 9 y entre la A y la F. La entrada puede tener como máximo catorce caracteres, que es 1FFFFFFFFFFFFF, y cualquier cosa más larga se rechaza con un mensaje en lugar de truncarse. El campo de entrada no admite separador de millares ni el prefijo 0x. Los ceros a la izquierda se aceptan y no cambian nada, y un signo menos delante produce un resultado decimal negativo: la suma se calcula para los dígitos y el signo se aplica al total. Las mayúsculas no son significativas en la entrada, aunque la suma de valores posicionales se imprime siempre con letras mayúsculas. La tabla de abajo lista las potencias de dieciséis desde 16⁰ hasta 16¹³ y es fija, así que no sigue lo que hayas tecleado; está ahí para poder consultar el peso de cualquier posición. El sentido contrario, de un número decimal a hexadecimal, es otra página, y esta no hace más aritmética sobre el resultado que la suma que imprime.
Preguntas frecuentes
- ¿Cómo paso de hexadecimal a decimal a mano?
- Escribe las potencias de dieciséis debajo de los caracteres, empezando por 1 a la derecha y multiplicando por dieciséis en cada paso hacia la izquierda, luego multiplica cada carácter por la potencia que tiene debajo y suma los resultados. Las letras hay que sustituirlas antes: A es 10, B es 11, C es 12, D es 13, E es 14 y F es 15. Para 2A3F eso da 2×4096 + 10×256 + 3×16 + 15, que es 10815.
- ¿Qué significan las letras de la A a la F?
- Son los valores del diez al quince, en orden: A es 10, B es 11, C es 12, D es 13, E es 14 y F es 15. La base dieciséis necesita dieciséis caracteres sueltos y las cifras decimales solo aportan diez, así que hacen falta seis símbolos más y las letras son la convención acordada en el sistema hexadecimal. Cada letra es un coeficiente exactamente igual que una cifra, así que una F vale quince veces lo que valga su posición: quince en el último lugar, 240 un lugar a la izquierda.
- ¿Cuál es el número hexadecimal más grande que puedo convertir aquí?
- Catorce caracteres. 1FFFFFFFFFFFFF es el techo y se convierte en 9.007.199.254.740.991, que es la misma frontera que las páginas decimales enuncian como cincuenta y tres dígitos binarios. Una cadena más larga se rechaza con un mensaje en lugar de truncarse o redondearse, porque más allá de esa anchura una máquina no puede mantener separados los enteros vecinos y la respuesta no sería fiable.
- ¿Por qué FF es igual a 255 y no a 256?
- Porque la cuenta empieza en 00 y no en 01. Dos caracteres hexadecimales dan 256 cadenas distintas, que van de 00 a FF, así que el valor más grande que pueden representar es 255, uno menos que el número de posibilidades. El mismo desfase de uno aparece en binario, donde ocho bits van de 0 a 255, y esa es la razón de que el máximo de un byte sea 255 en todos los lenguajes que tienen bytes.
- ¿Es lo mismo hexadecimal a decimal que hexadecimal a binario?
- No. Convertir a binario es una sustitución que no necesita aritmética: cada carácter se convierte en cuatro bits y ese es el método entero. Convertir a decimal es una suma ponderada, porque las posiciones valen potencias de dieciséis y no potencias de dos: 2A3F es 2×4096 + 10×256 + 3×16 + 15, y las letras hay que convertirlas en valores antes de multiplicar nada. El resultado binario de la misma cadena es 10101000111111, y las dos respuestas son la misma cantidad escrita de dos maneras.
- ¿Por qué la página imprime las potencias de dieciséis en una tabla?
- Porque las potencias son los pesos por los que se multiplica cada término de la suma, y consultarlas es más rápido que calcularlas. La tabla va de 16⁰ a 16¹³ y es exhaustiva para esta página: catorce caracteres es la entrada más ancha que se acepta, así que ninguna respuesta aceptada usa una posición que la tabla no liste. Leerla junto a la suma del panel de resultados muestra qué peso corresponde a qué carácter.
Referencias
- 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 the same quantity is written in several bases — Wolfram MathWorld (United States)
- Powers of two — the sequence that the powers of sixteen are every fourth term of, catalogued as OEIS A000079 — OEIS Foundation Inc. (United States)