Convertidor de base numérica
Convierte entre binario, octal, decimal y hexadecimal.
Entender las bases numéricas
Una base numérica (o radix) determina cuántos dígitos únicos sirven para representar los números. La más familiar es la base 10 (decimal), que usa los dígitos 0-9. Los ordenadores usan de forma nativa la base 2 (binaria), solo con 0 y 1.
- Binario (base 2): usada internamente por todos los sistemas digitales. Cada dígito es un «bit».
- Octal (base 8): usa los dígitos 0-7. Habitual en los permisos de archivos Unix (p. ej. chmod 755).
- Decimal (base 10): el sistema numérico humano estándar.
- Hexadecimal (base 16): usa 0-9 y A-F. Muy usado para los colores (#FF0000), las direcciones de memoria y la representación de bytes.
Preguntas frecuentes
¿Admite números muy grandes?
Sí. Esta herramienta usa el BigInt de JavaScript, que admite enteros arbitrariamente grandes sin pérdida de precisión. Puedes convertir números de cientos de cifras.
¿Por qué es importante el binario en informática?
Los ordenadores usan señales eléctricas de dos estados (encendido/apagado), que corresponden de forma natural al binario (1/0). Cualquier dato · texto, imagen, vídeo · se guarda y procesa en última instancia en binario.
Cómo funciona la notación posicional
Un sistema numérico posicional representa un número usando un conjunto de tamaño fijo de símbolos de dígitos, donde la posición de cada dígito determina su peso. El peso de la posición i (contada desde la derecha, empezando en cero) es base^i. El valor del número es la suma de digit × base^i en todas las posiciones. La cadena 352 en base 10 significa 3×100 + 5×10 + 2×1 = 352. La cadena 1011 en base 2 significa 1×8 + 0×4 + 1×2 + 1×1 = 11 en decimal.
La notación posicional es una de las dos grandes invenciones en la representación de números. La otra es la no posicional (los números romanos, el hierático egipcio), donde los símbolos tienen valores fijos con independencia de la posición. Los sistemas posicionales comprimen; los no posicionales no: el número 1888 ocupa cuatro dígitos en decimal, pero ocho caracteres en romano: MDCCCLXXXVIII.
Una breve historia de las bases
Los babilonios usaban un sistema posicional en base 60 (sexagesimal) al menos desde el período paleobabilónico, alrededor de 1900-1600 a. C. Las tablillas cuneiformes de esa época ya usan la notación posicional. ¿Por qué 60? Tiene un número excepcionalmente alto de divisores pequeños (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60), lo que facilitaba la aritmética de fracciones en un mundo anterior a las fracciones decimales. El legado babilónico sigue en tu bolsillo: el tiempo (60 segundos en un minuto, 60 minutos en una hora) y los ángulos y las coordenadas geográficas (360 grados en un círculo, 60 minutos de arco por grado, 60 segundos de arco por minuto) son descendientes directos. Cuando lees un reloj o una latitud, estás leyendo en sexagesimal.
El sistema decimal posicional tal y como lo conocemos lo desarrollaron los matemáticos indios en los primeros siglos de nuestra era. El salto conceptual que lo distingue de los ábacos de cálculo anteriores es un símbolo escrito para el cero que actúa como marcador de posición. El primer uso inequívoco del cero en un contexto posicional se atribuye generalmente a Brahmagupta (628 d. C.), cuyo tratado Brāhmasphuṭasiddhānta dio reglas para la aritmética con el cero. El manuscrito Bakhshali muestra un uso aún anterior de un punto (bindu) como marcador de posición.
El sistema decimal viajó de la India al mundo islámico en los siglos VIII-IX; el polímata persa al-Khwārizmī escribió Sobre el cálculo con los números hindúes alrededor del 825 d. C. («algoritmo» y «álgebra» son descendientes etimológicos directos de su nombre y de los títulos de sus libros). Europa se quedó atrás. Leonardo de Pisa, conocido como Fibonacci, introdujo formalmente los números indoarábigos en la Europa latina en Liber Abaci (1202), demostrando su superioridad sobre los números romanos. Los números romanos perduraron en la contabilidad europea hasta el siglo XVI.
Gottfried Wilhelm Leibniz describió un sistema numérico completamente binario en su artículo de 1703 Explication de l'arithmétique binaire, aunque su motivación principal era filosófica (la correspondencia con el I Ching) más que práctica. El salto a la computación binaria llegó con la tesis de máster de Claude Shannon de 1937 en el MIT, «A Symbolic Analysis of Relay and Switching Circuits», que demostró que el álgebra de Boole podía modelar redes de relés eléctricos, lo que convirtió el binario en el lenguaje natural de la lógica digital.
Los algoritmos de conversión
De decimal a otra base: división repetida. Para convertir un entero decimal N a la base b, divide N entre b, anota el resto, sustituye N por el cociente y repite hasta que el cociente sea 0. Los restos leídos de abajo arriba son los dígitos en base b. Ejemplo resuelto para convertir 156 a binario: 156÷2 = 78 r0, 78÷2 = 39 r0, 39÷2 = 19 r1, 19÷2 = 9 r1, 9÷2 = 4 r1, 4÷2 = 2 r0, 2÷2 = 1 r0, 1÷2 = 0 r1; leyendo los restos de abajo arriba: 10011100. Verifica: 128 + 16 + 8 + 4 = 156.
De otra base a decimal: el método de Horner. Empieza con 0; para cada dígito de izquierda a derecha, multiplica el total acumulado por la base y suma el nuevo dígito. Ejemplo resuelto para el hexadecimal 1F4: 0×16 + 1 = 1, luego 1×16 + 15 = 31, luego 31×16 + 4 = 500.
Ambos algoritmos se ejecutan en tiempo lineal respecto al número de dígitos, y el BigInt de JavaScript los implementa internamente, razón por la cual esta herramienta no tiene límite de precisión. Un número de 200 dígitos se convierte limpiamente entre dos bases cualesquiera sin pérdida por redondeo, igual que lo haría una calculadora con aritmética de enteros de precisión arbitraria.
Las cuatro bases que importan en la informática
- Binario (base 2): los transistores están encendidos o apagados, así que el binario es la representación natural de la lógica digital. Todos los datos, en última instancia, son binarios.
- Octal (base 8): históricamente común en los inicios de la informática porque 3 dígitos binarios se corresponden limpiamente con 1 dígito octal. Menos prominente hoy, pero todavía usado en los permisos de archivo de Unix (
chmod 755) y en algunos formatos de archivo heredados. - Decimal (base 10): el sistema numérico humano de cada día, casi con seguridad porque tenemos diez dedos. Usado por los sistemas financieros, la ciencia y cualquier lugar donde las personas lean números.
- Hexadecimal (base 16): exactamente 4 bits por dígito, lo que significa que 1 byte = 2 caracteres hexadecimales. El estándar de facto para la representación compacta a nivel de byte: los códigos de color hexadecimales (
#FF0000), las direcciones de memoria (0x7fff...), los puntos de código Unicode (U+1F600), las direcciones MAC, los resúmenes hash.
Potencias de 2 que conviene memorizar
| Potencia | Decimal | Hexadecimal | Por qué importa |
|---|---|---|---|
| 2⁸ | 256 | 0x100 | Un byte; valor máximo de un canal de 8 bits (RGB) |
| 2¹⁰ | 1,024 | 0x400 | «1K» en el contexto de la informática |
| 2¹⁶ | 65,536 | 0x10000 | Tamaño del BMP de UTF-16; máximo de un entero de 16 bits |
| 2²⁰ | 1,048,576 | 0x100000 | «1M» en el contexto de la informática |
| 2²⁴ | 16,777,216 | 0x1000000 | RGB de 24 bits («16,7 millones de colores») |
| 2³² | ~4300 millones | 0x100000000 | Máximo de un entero de 32 bits sin signo; espacio de direcciones IPv4 |
| 2⁶⁴ | ~1.8×10¹⁹ | 0x100… | Máximo de un entero de 64 bits; muy por encima de la precisión de punto flotante |
Cuándo recurrirías a un conversor de bases
- Leer volcados hexadecimales de un depurador, una captura de paquetes de red o un archivo binario. Traducir
0xFFa 255 mentalmente está bien;0x7F4Anormalmente no. - Códigos de color CSS:
#FF0000es (255, 0, 0) en decimal. La conversión de hexadecimal a RGB es exactamente de base 16 → base 10 en cada par de dos caracteres. - Permisos de archivo de Unix:
chmod 755es octal: 7 = rwx (lectura+escritura+ejecución = 4+2+1), 5 = r-x (lectura+ejecución = 4+1), y 5 otra vez. Cada dígito octal son exactamente 3 bits binarios. - Octetos IPv4: las direcciones como
192.168.1.1son cuatro números de 8 bits. Las máscaras de subred son más fáciles de razonar en binario (una máscara/24son 24 unos seguidos de 8 ceros). - Puntos de código Unicode: los caracteres se catalogan en hexadecimal (U+2665 para ♥, U+1F600 para 😀). Existen los equivalentes decimales, pero la forma hexadecimal coincide con las tablas de Unicode.
- Aritmética de máscaras de bits: los indicadores de funcionalidad, los bits de permiso y los valores de registros de hardware son todos más fáciles de leer en binario o hexadecimal que en decimal.
- Depurar ensamblador o código desensamblado: las direcciones, los códigos de operación y los valores inmediatos se escriben convencionalmente en hexadecimal.
Otras bases que conviene conocer
- Base 36: la base más alta que cabe en caracteres alfanuméricos sin caracteres especiales (10 dígitos + 26 letras). Usada para los hashes cortos de URL y algunos esquemas de codificación. El
Number.toString(36)de JavaScript la expone directamente. - Base 58: usada en las direcciones de Bitcoin y Ripple. Omite los caracteres fáciles de confundir
0(cero),O(O mayúscula),I(i mayúscula) yl(ele minúscula), para que las direcciones sean robustas frente a los errores de transcripción manual. - Base 62: alfanumérico completo (dígitos + minúsculas + mayúsculas). Común en los slugs de los acortadores de URL (el «abc123» en
example.com/abc123). - Base 64: codifica datos binarios como ASCII imprimible para su transporte por canales de solo texto (correo electrónico, JSON, URL). Tiene un alcance diferente al de esta herramienta: opera sobre flujos de bytes en lugar de sobre enteros.
Convenciones de prefijos en el código fuente
La mayoría de los lenguajes modernos usan el mismo conjunto de prefijos literales para desambiguar la base en el código fuente:
- Binario:
0bo0B(Python, Ruby, Java desde la 7, C++ desde C++14, JavaScript desde ES6, Rust). Ejemplo:0b10011100. - Octal:
0oo0O(Python 3, ES6, Rust). Los lenguajes más antiguos de la familia C usan un cero inicial (0755), lo que es a veces una trampa si rellenas un decimal con un cero por accidente. - Hexadecimal:
0xo0X: comprendido universalmente en prácticamente todos los lenguajes de programación. - Decimal: no se necesita prefijo.
Más preguntas
¿Y los números negativos?
Los ordenadores representan los enteros negativos usando el complemento a dos: invierte todos los bits y suma 1. Así, en complemento a dos de 8 bits, −1 es 11111111 (0xFF), −5 es 11111011 (0xFB) y −128 es 10000000 (0x80). El bit más significativo indica el signo. Esta herramienta muestra los enteros negativos con un signo menos inicial en lugar de una representación en complemento a dos, porque esta última solo tiene sentido con un ancho de bits fijo y, dado que la herramienta usa BigInt de precisión arbitraria, no hay un ancho fijo con el que interpretarla.
¿Por qué el hexadecimal usa las letras A-F?
Porque la base 16 necesita 16 símbolos de dígito distintos y los dígitos decimales 0-9 solo proporcionan diez. La convención de usar A-F (sin distinción de mayúsculas y minúsculas) para 10-15 la popularizó el IBM System/360 en la década de 1960 y se estandarizó en todo el sector. Los sistemas anteriores experimentaron con otros glifos (el G-15 de Bendix usaba u, v, w, x, y, z), pero A-F se impuso.
¿Puede esta herramienta manejar fracciones?
No, es solo de enteros. La conversión de bases fraccionarias es más compleja porque la mayoría de las fracciones decimales no tienen una representación exacta en binario (el famoso problema de punto flotante 0.1 + 0.2 ≠ 0.3). Para la inspección a nivel de bits de los números de punto flotante, un visualizador de IEEE 754 específico es la herramienta adecuada.
¿Se envía algo a un servidor?
No. Las conversiones se ejecutan en tu navegador usando la aritmética BigInt nativa de JavaScript. Nada de lo que introduces sale de la página; la herramienta funciona sin conexión una vez cargada.