Guía de Conversión de Bases Numéricas: Binario, Hexadecimal y Octal
Si alguna vez te has quedado mirando un código de color hexadecimal como #1A2B3C o un permiso de Unix como chmod 755 preguntándote de dónde salen esos números, no eres el único. Las bases numéricas son uno de esos conceptos fundamentales que la mayoría de los desarrolladores usan todos los días sin pensarlo dos veces — hasta el momento en que realmente necesitan convertir entre ellas.
Vamos a resolver eso. Esta guía recorre los sistemas numéricos que importan en programación, cómo convertir entre ellos y cuándo aparece cada uno en la práctica.
¿Qué Significa Realmente "Base"?
Contamos en base 10 (decimal) porque tenemos diez dedos. Cada posición de dígito representa una potencia de 10:
4 2 7
| | |
| | └── 7 × 10⁰ = 7
| └────── 2 × 10¹ = 20
└────────── 4 × 10² = 400
───
Total = 427
Eso es notación posicional. La "base" (también llamada raíz) indica cuántos dígitos únicos existen en el sistema y por cuánto se multiplica cada posición. La base 10 tiene los dígitos 0–9. La base 2 tiene los dígitos 0–1. La base 16 tiene los dígitos 0–9 y A–F.
El concepto es idéntico en todas las bases — lo único que cambia es la cantidad de símbolos disponibles y el multiplicador por posición.
Dato curioso: los babilonios usaban base 60 (sexagesimal). Por eso tenemos 60 segundos en un minuto y 360 grados en un círculo.
Binario (Base 2): El Lenguaje del Hardware
Por Qué las Computadoras Usan Binario
Las computadoras funcionan con transistores, y los transistores tienen dos estados confiables: encendido y apagado. Eso se corresponde perfectamente con 1 y 0. En teoría se podría construir una computadora en base 3, pero distinguir entre tres niveles de voltaje es más difícil y propenso a errores que distinguir entre dos. El binario gana porque es simple y robusto.
Cómo Leer Números Binarios
El binario funciona igual que el decimal, pero cada posición representa una potencia de 2:
1 0 1 1 0 1
| | | | | |
| | | | | └── 1 × 2⁰ = 1
| | | | └────── 0 × 2¹ = 0
| | | └────────── 1 × 2² = 4
| | └────────────── 1 × 2³ = 8
| └────────────────── 0 × 2⁴ = 0
└────────────────────── 1 × 2⁵ = 32
──
Total = 45
Entonces 101101 en binario equivale a 45 en decimal. Se lee de derecha a izquierda, duplicando el valor posicional cada vez: 1, 2, 4, 8, 16, 32, 64, 128...
Bits, Bytes y Más Allá
- Bit: un solo dígito binario (0 o 1)
- Nibble: 4 bits (representa un dígito hexadecimal, valores 0–15)
- Byte: 8 bits (valores 0–255)
- Kilobyte: 1.024 bytes (2¹⁰)
Un solo byte puede representar 256 valores diferentes, por eso los caracteres ASCII caben en un byte y los canales de color RGB van de 0 a 255.
Aritmética Binaria Básica
La suma en binario sigue las mismas reglas que en decimal, pero se acarrea en 2 en lugar de 10:
1 0 1 1 (11 in decimal)
+ 0 1 1 0 ( 6 in decimal)
─────────
1 0 0 0 1 (17 in decimal)
Cuando 1 + 1 = 10 en binario (igual que 9 + 1 = 10 en decimal), se escribe 0 y se acarrea 1.
Octal (Base 8): El Sistema Heredado
Una Breve Historia
El octal fue popular en los años 60 y 70 con máquinas como el PDP-8, que usaba palabras de 12 bits — divisibles perfectamente en cuatro grupos de tres bits. Cada dígito octal corresponde exactamente a tres dígitos binarios, lo que lo convertía en una abreviatura conveniente.
Dónde Todavía se Encuentra el Octal
El lugar más común hoy en día son los permisos de archivos en Unix. Cuando escribes chmod 755 script.sh, cada dígito es un número octal que representa los permisos de lectura (4), escritura (2) y ejecución (1):
7 = 4 + 2 + 1 = rwx (owner: read, write, execute)
5 = 4 + 0 + 1 = r-x (group: read, execute)
5 = 4 + 0 + 1 = r-x (others: read, execute)
Los dígitos octales en programación usan el prefijo 0o (o simplemente un cero inicial en C, lo que ha causado muchos errores):
const permissions = 0o755; // 493 in decimal
console.log(permissions.toString(8)); // "755"
Cuidado en JavaScript y Python: un cero inicial como 0755 podría interpretarse como octal en algunos contextos. Usa siempre el prefijo explícito 0o para evitar ambigüedades.
Hexadecimal (Base 16): El Favorito de los Desarrolladores
Por Qué Existe el Hexadecimal
El hexadecimal resuelve un problema práctico: los números binarios se hacen largos muy rápido. El número decimal 255 es 11111111 en binario — ocho dígitos. En hexadecimal, es simplemente FF. Cada dígito hexadecimal corresponde exactamente a cuatro dígitos binarios (un nibble), lo que hace que las conversiones sean triviales y los números se mantengan compactos.
El hexadecimal usa los dígitos 0–9 más las letras A–F:
| Decimal | Binary | Hex |
|---|---|---|
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 9 | 1001 | 9 |
| 10 | 1010 | A |
| 11 | 1011 | B |
| 15 | 1111 | F |
El Hexadecimal en la Práctica
Los colores web son el uso más visible del hexadecimal. #FF5733 se descompone así:
#FF5733
││││││
││││└┘── Blue: 0x33 = 51
││└┘──── Green: 0x57 = 87
└┘────── Red: 0xFF = 255
Las direcciones de memoria en depuradores se muestran en hexadecimal: 0x7FFF5FBFFA10 es más legible que su equivalente decimal de 140.734.799.804.944.
Las direcciones MAC usan pares hexadecimales separados por dos puntos: A4:83:E7:2B:00:1F.
Color en CSS: rgba(255, 87, 51, 1.0) y #FF5733 representan el mismo color — el hexadecimal es simplemente más compacto.
Convertir Entre Bases
De Decimal a Binario
Divide repetidamente entre 2 y recoge los restos, leyéndolos de abajo hacia arriba:
45 ÷ 2 = 22 remainder 1 ↑
22 ÷ 2 = 11 remainder 0 │
11 ÷ 2 = 5 remainder 1 │ Read upward:
5 ÷ 2 = 2 remainder 1 │ 101101
2 ÷ 2 = 1 remainder 0 │
1 ÷ 2 = 0 remainder 1 │
Resultado: 45 en decimal = 101101 en binario.
De Decimal a Hexadecimal
El mismo enfoque, pero dividiendo entre 16:
427 ÷ 16 = 26 remainder 11 (B) ↑
26 ÷ 16 = 1 remainder 10 (A) │ Read upward: 1AB
1 ÷ 16 = 0 remainder 1 │
Resultado: 427 en decimal = 1AB en hexadecimal.
De Binario a Hexadecimal (La Más Fácil)
Agrupa los dígitos binarios en conjuntos de cuatro (de derecha a izquierda) y convierte cada grupo:
Binary: 10 1101
Padded: 0010 1101
Groups: 2 D
Result: 0x2D
Verificación: 0x2D = 2×16 + 13 = 45 ✓
Por eso el hexadecimal y el binario son compañeros naturales — la conversión es mecánica.
De Hexadecimal a Binario
Invierte el proceso. Expande cada dígito hexadecimal a cuatro dígitos binarios:
Hex: F A 3
Binary: 1111 1010 0011
Result: 111110100011
Consejo: memoriza los patrones binarios del 0 al F (solo son 16). Una vez que los conozcas, las conversiones entre hexadecimal y binario las harás instantáneamente de cabeza. Empieza por las potencias de dos: 1=0001, 2=0010, 4=0100, 8=1000.
Notación de Bases Numéricas en Lenguajes de Programación
Todos los lenguajes principales tienen sintaxis para escribir números en diferentes bases:
// JavaScript
const binary = 0b101101; // 45
const octal = 0o55; // 45
const hex = 0x2D; // 45
const decimal = 45; // 45
// Convert to string in any base
(45).toString(2); // "101101"
(45).toString(8); // "55"
(45).toString(16); // "2d"
// Parse from string
parseInt("101101", 2); // 45
parseInt("55", 8); // 45
parseInt("2D", 16); // 45
# Python
binary = 0b101101 # 45
octal = 0o55 # 45
hexval = 0x2D # 45
# Convert to string
bin(45) # '0b101101'
oct(45) # '0o55'
hex(45) # '0x2d'
# Parse from string
int("101101", 2) # 45
int("55", 8) # 45
int("2D", 16) # 45
// C / C++
int binary = 0b101101; // 45 (C23 / GCC extension)
int octal = 055; // 45 (leading zero = octal!)
int hex = 0x2D; // 45
Observa la trampa de C: un 0 inicial significa octal. Escribir int x = 010; te da 8, no 10. Esto ha confundido a innumerables programadores.
Casos de Uso Prácticos
Operaciones a Nivel de Bits y Banderas
El hexadecimal es el estándar para máscaras de bits porque cada dígito cubre exactamente cuatro banderas:
const READ = 0x01; // 0001
const WRITE = 0x02; // 0010
const EXECUTE = 0x04; // 0100
const ADMIN = 0x08; // 1000
let permissions = READ | WRITE; // 0x03 = 0011
if (permissions & EXECUTE) {
// check if execute bit is set
}
Depuración e Inspección de Memoria
Cuando ves un fallo de segmentación en la dirección 0xDEADBEEF o memoria inicializada con 0xCAFEBABE, esas son constantes hexadecimales elegidas específicamente porque son fáciles de detectar en volcados de memoria. Los archivos de clase de Java comienzan con el número mágico 0xCAFEBABE — y sí, alguien se divirtió eligiendo ese nombre.
Protocolos de Red
Las direcciones IPv6 usan notación hexadecimal: 2001:0db8:85a3:0000:0000:8a2e:0370:7334. Las direcciones MAC, los identificadores de proveedor USB y los UUID de Bluetooth usan representación hexadecimal porque mantiene los datos binarios compactos y legibles.
Pruébalo Tú Mismo
Olvídate de las cuentas manuales. Nuestro Conversor de Bases Numéricas realiza conversiones entre cualquier base al instante — decimal, binario, octal, hexadecimal o cualquier base personalizada hasta 36. Pega un número, selecciona la base de origen y destino, y obtén el resultado de inmediato. Todo se ejecuta en tu navegador, así que nada se envía a un servidor.
Es especialmente útil cuando necesitas:
- Depurar volcados de memoria hexadecimales convirtiéndolos a decimal
- Calcular permisos de Unix en binario/octal
- Verificar códigos de color entre valores hexadecimales y RGB
- Convertir entre bases que no son potencias de dos
Recursos Relacionados
- Codificación Base64 Explicada — Base64 usa un enfoque diferente (grupos de 6 bits mapeados a 64 caracteres) para codificar datos binarios como texto
- Comparación de Algoritmos Hash — las salidas de hash se muestran típicamente en hexadecimal
- Conversor de Bases Numéricas — convierte entre cualquier base al instante en tu navegador
🛠️ Pruébalo ahora: Conversor de Bases Numéricas — convierte entre binario, octal, decimal, hexadecimal y cualquier base hasta 36. 100% del lado del cliente, completamente gratis.