FlowingDev

Más allá de la base 10: Cómo las computadoras cuentan en hexadecimal, binario y octal

Aprende cómo las computadoras usan bases numéricas como binario (base 2), hexadecimal (base 16) y octal para representar todo, desde colores hasta direcciones de red.

Probar la herramienta: Calculadora de Bases

En una oración

Una calculadora de bases numéricas traduce números entre diferentes sistemas de conteo, como el familiar sistema decimal (base 10) que usamos a diario y el binario (base 2) que impulsa toda la lógica digital.

El problema que resuelve

Los humanos estamos obsesionados con el número diez. Tenemos diez dedos en las manos y diez en los pies, así que contar en grupos de diez (el sistema decimal o base 10) se siente tan natural como respirar. ¿Pero las computadoras? Son un poco más simples. En su núcleo, solo entienden dos cosas: "encendido" y "apagado". Una corriente fluye o no. Un transistor está activado o no. Este es el mundo del binario, o base 2. Cada pieza de información en una computadora —este texto, tu video de gatos favorito, el mismísimo sistema operativo— es solo una secuencia inimaginablemente larga de unos y ceros.

Esto crea un choque cultural. En los primeros días de la computación, los programadores tenían que mirar fijamente estas enormes murallas de código binario para depurar sus programas. Imagina tratar de encontrar un error tipográfico en una cadena de un millón de caracteres de 10110010.... Era exasperante, propenso a errores y una de las principales causas de que los programadores se golpearan la cabeza contra la pared.

Para salvar su cordura (y sus frentes), desarrollaron atajos. Se dieron cuenta de que podían agrupar los bits. Agruparlos de tres en tres les dio el sistema octal (base 8), y agruparlos de cuatro en cuatro les dio el hexadecimal (base 16). De repente, una larga secuencia binaria como 1011001011111110 podía escribirse en la forma hexadecimal mucho más compacta B2FE.

La calculadora de bases numéricas existe para resolver este problema fundamental de traducción. Es el diplomático universal entre el mundo de base 10 del pensamiento humano y los mundos de base 2, 8 y 16 que habitan nuestros sirvientes de silicio.

Cómo funciona por dentro

La magia detrás de cambiar entre bases numéricas no es magia en absoluto, es solo un sistema de conteo llamado notación posicional.

Pero, ¿qué es una "base"?

En cualquier base, la posición de un dígito determina su valor. Damos esto por sentado en base 10. En el número 345, sabemos intuitivamente que significa "tres centenas, cuatro decenas y cinco unidades".

Matemáticamente, eso es: (3 * 10^2) + (4 * 10^1) + (5 * 10^0) = (3 * 100) + (4 * 10) + (5 * 1) = 300 + 40 + 5 = 345

La "base" es el número que elevas a una potencia por cada posición (en este caso, 10). La misma regla se aplica a cualquier base.

En binario (base 2), solo tenemos dos dígitos: 0 y 1. El número 1011 en binario es: (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = (1 * 8) + (0 * 4) + (1 * 2) + (1 * 1) = 8 + 0 + 2 + 1 = 11 (en decimal)

El hexadecimal (base 16) es un poco más peculiar porque necesitamos 16 "dígitos" únicos. Usamos 0-9 para los primeros diez, y luego tomamos prestadas las letras A-F para los valores 10-15.

Decimal Hex Binario
0 0 0000
1 1 0001
... ... ...
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111

Convirtiendo de decimal a cualquier base

Para ir en la otra dirección —de nuestro familiar sistema decimal a otra base— usamos la división repetida. Convirtamos 187 (decimal) a hexadecimal (base 16).

  1. Divide 187 entre 16: 187 / 16 = 11 con un residuo de 11. En hexadecimal, 11 es B.
  2. Divide el resultado (11) entre 16: 11 / 16 = 0 con un residuo de 11. En hexadecimal, 11 es B.
  3. Lee los residuos de abajo hacia arriba: BB.

Entonces, 187 en decimal es BB en hexadecimal.

La relación especial: binario, octal y hexadecimal

Aquí está el hermoso atajo que descubrieron los primeros programadores. Como 8 = 2^3 y 16 = 2^4, puedes convertir de binario a octal o hexadecimal sin tocar el sistema decimal para nada. ¡Solo tienes que agrupar los bits!

Toma el número binario 110101110100.

  • Para convertir a Hexadecimal (base 16): Agrupa los bits en cuatros, comenzando desde la derecha. 1101 0111 0100 Luego, convierte cada grupo: 1101 = D (13) 0111 = 7 0100 = 4 Resultado: D74 en hexadecimal.

  • Para convertir a Octal (base 8): Agrupa los bits en tríos, comenzando desde la derecha. 110 101 110 100 Luego, convierte cada grupo: 110 = 6 101 = 5 110 = 6 100 = 4 Resultado: 6564 en octal.

Es por esto que el hexadecimal y el octal son tan populares. Son representaciones compactas y legibles por humanos de datos binarios puros.

Operaciones a nivel de bits (Bitwise)

Una calculadora para programadores va más allá de la simple conversión de bases. También realiza operaciones a nivel de bits, que manipulan los unos y ceros individuales de la representación binaria de un número.

  • AND (&): Devuelve un 1 en cada posición de bit para la cual los bits correspondientes de ambos operandos son 1. Es genial para "enmascarar" o verificar si un bit específico está encendido. 1101 & 1011 = 1001
  • OR (|): Devuelve un 1 en cada posición de bit para la cual los bits correspondientes de uno o ambos operandos son 1. Útil para "activar" un bit. 1101 | 1011 = 1111
  • XOR (^): Devuelve un 1 en cada posición de bit para la cual los bits correspondientes son diferentes. Es una forma práctica de alternar bits. 1101 ^ 1011 = 0110
  • NOT (~): Invierte todos los bits. ~1101 = 0010 (asumiendo números de 4 bits)
  • Desplazamientos de bits (<<, >>): Empuja todos los bits hacia la izquierda o la derecha. Un desplazamiento a la izquierda (<< 1) es una forma rápida de multiplicar por 2; un desplazamiento a la derecha (>> 1) es una forma rápida de dividir entre 2.

Historias del mundo real

El caso del tipo de archivo misterioso

Una desarrolladora recibe un correo electrónico con un archivo adjunto llamado data.bin. Se supone que es una imagen, pero su computadora no tiene idea de cómo abrirlo. En lugar de rendirse, abre el archivo en un visor hexadecimal. Los primerísimos bytes leen 89 50 4E 47 0D 0A 1A 0A. Ya ha visto galimatías como este antes. Pone los primeros cuatro bytes, 89504E47, en un motor de búsqueda. Los resultados son inmediatos: este es el "número mágico" o firma de archivo para una imagen PNG. Renombra el archivo a data.png y, ¡voilà!, se abre para revelar una gloriosa imagen de un shiba inu con un sombrero.

Lección: El hexadecimal es el lenguaje de los datos en crudo. Entenderlo te permite identificar y depurar archivos en su nivel más fundamental.

El dilema del color en CSS

Una desarrolladora front-end se está volviendo loca. Especificó un rojo hermoso y vibrante en su CSS: color: #FF0000;. Pero en la pantalla, el color es un rojo ligeramente más apagado y desvaído. Usa las herramientas de desarrollador del navegador para inspeccionar el elemento y descubre que el color calculado es en realidad #FE0000. Usando una calculadora de bases, confirma que FF es 255 en decimal (el valor máximo para un canal de color), mientras que FE es 254. La diferencia es mínima, pero está ahí. Rastrea el valor del color a través de su código JavaScript y encuentra una función que estaba convirtiendo un número de punto flotante a un entero usando Math.floor() en lugar de Math.round(). Un valor como 254.99 se convertía en 254 (FE) en lugar de 255 (FF). Un arreglo rápido y su rojo vuelve a ser perfectamente vibrante.

Lección: El hexadecimal es la lingua franca del color en la web. Ser capaz de convertir y razonar rápidamente sobre valores hexadecimales es crucial para un diseño y depuración con precisión de píxel.

Estableciendo permisos en un servidor Linux

Un sysadmin junior necesita asegurar un archivo de configuración en un servidor. El sysadmin senior le dice: "Establece los permisos a rwx r-x ---". El admin junior sabe que esto corresponde a los permisos del propietario, del grupo y de otros, pero ha olvidado el comando. Recuerda que los permisos de Linux pueden representarse en octal. Lo desglosa:

  • Propietario: rwx (leer, escribir, ejecutar) = 4 + 2 + 1 = 7
  • Grupo: r-x (leer, ejecutar) = 4 + 0 + 1 = 5
  • Otros: --- (sin permisos) = 0 + 0 + 0 = 0

Los combina para obtener el número octal 750. Escribe con confianza chmod 750 config.yml y recibe un gesto de aprobación de su superior.

Lección: El sistema octal proporciona una forma concisa y estándar de representar máscaras de bits, que son comunes en sistemas de bajo nivel como los permisos de archivo de Unix.

Errores y trampas comunes

  • Olvidar el prefijo: El número 10 significa algo muy diferente en decimal, binario y hexadecimal. El código y la documentación usan prefijos como 0x para hexadecimal (0x10 = 16), 0b para binario (0b10 = 2) y 0o para octal (0o10 = 8) para evitar ambigüedades. Siempre ten en cuenta el contexto.
  • Confundir caracteres similares: Cuando estás cansado y mirando un volcado de memoria, es fácil confundir B con 8, o D con 0. Revisa dos veces tus transcripciones hexadecimales.
  • Ignorar el signo (Complemento a dos): Un número de 16 bits representado como 0xFFFF en hexadecimal podría significar 65535 si es un entero sin signo. Pero si es un entero con signo que usa el sistema común de "complemento a dos", representa -1. El significado de los bits depende enteramente de cómo se interpreten.
  • Los problemas del Endianness: Cuando un número de varios bytes como 0x1A2B3C4D se almacena en memoria, el orden de los bytes puede diferir. Los sistemas "Big-endian" lo almacenan como 1A 2B 3C 4D. Los sistemas "Little-endian" (como la mayoría de las PC modernas) lo almacenan como 4D 3C 2B 1A. Esta es una fuente clásica de errores en redes y análisis de archivos cuando dos sistemas con diferente endianness intentan comunicarse.

Por qué debería estar en tu radar

Deberías pensar en diferentes bases numéricas cada vez que estés mirando debajo de la superficie de las abstracciones de alto nivel. Esto incluye:

  • Analizar paquetes de red (p. ej., direcciones MAC, direcciones IPv6).
  • Trabajar con formatos de archivo o volcados de memoria en crudo.
  • Manejar salidas de hash (p. ej., SHA-256) que casi siempre se muestran en hexadecimal.
  • Ajustar con precisión colores web o gráficos de mapa de bits.
  • Escribir código de alto rendimiento utilizando operaciones a nivel de bits.
  • Configurar ajustes de sistema de bajo nivel, como permisos o registros de hardware.

Entender las bases numéricas es un superpoder de desarrollador. Cierra la brecha entre el código que escribes y los pulsos electrónicos que le dan vida.

Para profundizar

  • Positional notation en Wikipedia — El fundamento matemático de todos los sistemas de bases numéricas.
  • Hexadecimal en Wikipedia — Una inmersión profunda en la base 16, su historia y sus usos comunes.
  • Two's Complement en Wikipedia — La explicación definitiva de cómo las computadoras representan números negativos en binario.
  • JavaScript Bitwise Operators en MDN — Una guía práctica para usar operaciones a nivel de bits en un lenguaje popular.
  • List of file signatures en Wikipedia — Una referencia útil para identificar archivos por sus "números mágicos", a menudo expresados en hexadecimal.
  • Endianness en Wikipedia — Aprende por qué el orden de los bytes importa más de lo que crees.

Teoría lista. Hora de ensuciarse las manos — 100% en tu navegador.

Probar la herramienta: Calculadora de Bases