Los sistemas de bases como el binario y el hexadecimal parecen un poco extraños al principio. La clave está en entender cómo los diferentes sistemas «hacen tictac» como un cuentakilómetros cuando están llenos. La base 10, nuestro sistema decimal, hace «tic-tac» cuando tiene 10 elementos, creando un nuevo dígito. Esperamos 60 segundos antes de «pasar» a un nuevo minuto. El hexadecimal y el binario son similares, pero se repiten cada 16 y 2 elementos, respectivamente.
Prueba a convertir los números a hexadecimal y binario aquí:
En el pasado: Números Unarios
¡Hace mucho tiempo, no teníamos sistemas de bases! Era cuesta arriba en ambos sentidos, a través de la nieve y el calor abrasador. Cuando querías contar uno, escribías:
l
Cuando querías 5, escribías
lllll
Y claramente, 1 + 5 = 6
l + lllll = llllll
Esta es la forma más sencilla de contar.
Entran los romanos
En los números romanos, dos era uno, dos veces. Tres era uno, tres veces:
one = Itwo = IIthree = III
Sin embargo, decidieron que podían hacerlo mejor que la vieja tradición de las líneas en la arena. Para cinco, podríamos usar V para representar lllll y obtener algo como
l + V = Vl
No está mal, ¿eh? Y, por supuesto, hay muchos más símbolos (L, C, M, etc.) que se pueden utilizar.
El punto clave es que V y lllll son dos formas de codificar el número 5.
Dar un nombre a cada número
Otro avance fue darse cuenta de que cada número puede ser su propio concepto distinto. En lugar de representar el tres como una serie de unos, darle su propio símbolo: «3″. Haga esto del uno al nueve, y obtendrá los símbolos:
1 2 3 4 5 6 7 8 9
Los romanos estaban cerca, muy cerca, pero sólo daban símbolos únicos a 5, 10, 50, 100, 1000, etc.
Usa tu posición
Ahora claramente, no puedes dar a cada número su propio símbolo. Simplemente hay demasiados.
Pero fíjate en una idea sobre los números romanos: utilizan la posición de los símbolos para indicar el significado.
IV significa «restar 1 a 5″
y VI significa «sumar 1 a 5″.
En nuestro sistema numérico, utilizamos la posición de forma similar. Siempre sumamos y nunca restamos. Y cada posición es 10 más que la anterior.
Nuestra elección de la base 10
¿Por qué elegimos multiplicar por 10 cada vez? Muy probablemente porque tenemos 10 dedos.
Un punto a tener en cuenta es que necesitas suficientes dígitos para «llenar» hasta llegar al siguiente número. Permítame demostrarlo.
Si queremos hacer rodar el cuentakilómetros cada 10, por así decirlo, necesitamos símbolos para los números del uno al nueve; aún no hemos llegado al diez. Imagínate que los números van subiendo poco a poco: ¿en qué momento se da la vuelta a la siguiente unidad y se empieza desde cero?
Introduce el cero
¿Y qué pasa cuando llegamos al diez? ¿Cómo mostramos que queremos exactamente un «diez» y nada en la columna de «unos»?
Usamos el cero, el número que no existe. El cero es todo un concepto, es un marcador de posición, un espacio en blanco, un espacio y mucho más. Basta con decir que el cero es uno de los grandes inventos de todos los tiempos.
El cero nos permite tener un marcador de posición vacío, algo que los romanos no tenían. Fíjate en lo poco manejables que son sus números sin él.
¡La famosa novela de George Orwell «1984″ sería «MCMLXXXIV»! Se sale de la lengua, ¿no?
Considerando otras bases
Recuerda que elegimos dar la vuelta a nuestro cuentakilómetros cada diez. Nuestro conteo se ve así:
123456789 (uh oh, I'm getting full!)10 (ticked over – start a new digit)
¿Qué pasa si pasamos la cuenta a los 60, como hacemos con los segundos y los minutos?
1 second2345…58591:00 (60 seconds aka 1 minute. We've started a new digit.)
¿Todo bien hasta ahora, no? Observa que utilizamos los dos puntos (:) para indicar que estamos en un nuevo «dígito». En base 10, cada dígito puede ir solo.
Prueba en base 16
Si queremos base 16, podríamos hacer algo similar:
123456789101112131415 (we're getting full)1:00 (16 – we've started a new digit)
Sin embargo, no queremos escribir los números hexadecimales con la notación de dos puntos (aunque podríamos). Preferimos cocinar símbolos separados para el 10-15 y así poder escribir los números como estamos acostumbrados. Nos hemos quedado sin números (el 1-9 ya se ha utilizado, con el 0 como marcador de posición), así que necesitamos otros símbolos. Podríamos usar algunas líneas garabateadas u otras formas, pero la convención es usar letras, al estilo romano. Al igual que el 5 se convirtió en V, los programadores utilizan las letras A-F para obtener suficientes dígitos hasta el 16. Es decir,
123456789A (10 – we're using the symbol "A")B (11)C (12)D (13)E (14)F (15 – uh oh, we're getting full)10 (16 – we start a new digit)
Ah, ahora podemos usar un dígito por «lugar», y sabemos que 10 significa que hemos «llegado a 16″ una vez.
20 significa que hemos llegado a 16 dos veces (32).
25 significa que hemos llegado a 16 dos veces (lo que nos da 32) y hemos sumado 5 más. El total es 32 + 5 = 37.
Repaso rápido
¿Conmigo hasta ahora? Esto está muy bien, ¿no? Podemos contar en el sistema que queramos. Además, fíjate que la base 16 es más «eficiente en cuanto a espacio» en el sentido de que podemos escribir un número como el 11 en una sola cifra: B.
La base 16 realmente no es tan diferente de la base 10, simplemente tardamos más en llenarla.
El maravilloso mundo del binario
Hemos visto un montón de sistemas de bases, desde el unario demasiado simple, hasta los números romanos desordenados, la base 10 constante y la compacta base 16.
¿Qué tiene de bueno el binario? En el espíritu de mantener las cosas simples, es el sistema numérico más sencillo que tiene el concepto de «tic-tac». El unario, en el que sólo escribimos 1, 11, 111… es eterno. El binario, con dos opciones (1 y 0) se ve así:
1: 12: 10 (we're full – tick over)3: 114: 100 (we're full again – tick over)5: 1016: 1107: 1118: 1000 (tick over again)…
y así sucesivamente.
Debido a que el binario es tan simple, es muy fácil de construir en hardware. Sólo necesitas cosas que puedan encenderse o apagarse (representando 1 y 0), en lugar de cosas que tengan 10 estados posibles (para representar el decimal).
Por ser tan simple, el binario también es resistente a los errores. Si tu señal está «parcialmente encendida» (digamos 0,4), puedes asumir que es un cero. Y si está mayoritariamente encendida (por ejemplo, 0,8), puedes suponer que es un 1. Si utilizas un sistema con 10 estados posibles, es difícil saber cuándo se ha producido un error. Esta es una de las razones por las que las señales digitales son tan resistentes al ruido.
Otros ejemplos de bases
Usamos otras bases todo el tiempo, incluso bases que cambian dinámicamente. Normalmente no pensamos en ello así:
Horas, minutos, segundos: 1:32:04
- Sabemos que esto es 1 hora, 32 minutos, 4 segundos. En segundos, esto es 16060 + 32*60 + 4.
Pies y pulgadas: 3′ 5″
- Esto es 3 pies, 5 pulgadas o 3 * 12 + 5 pulgadas.
Libras y onzas: 8 lbs, 5 oz
- Como una libra son 16 oz, esto es 8 * 16 + 5 oz. Hemos estado usando un sistema numérico de base 16 todo el tiempo!
Pensamientos parciales
«10″ en cualquier sistema numérico indica la base, y significa que hemos pasado una vez. El 10 en binario significa dos, el 10 en decimal significa diez, y el 10 en hexadecimal es dieciséis.
¿Cómo se separan estos números? Los programadores suelen escribir «0b» delante de los números binarios. Así que 2 en binario es
0b10
De forma similar, escribirán 0x delante de los números hexadecimales. Así que 16 en hexadecimal es:
0×10
Si no hay ningún símbolo (0b o 0x) delante, asumimos que es de base 10, un número normal.
¡Ahora ve y disfruta de tus nuevos conocimientos!
Otros artículos de esta serie
- Sistemas numéricos y bases
- La guía rápida de los GUID
- Entendiendo la raíz cuadrada inversa rápida de Quake
- Una sencilla introducción a la informática Redes
- Intercambio de dos variables mediante XOR
- Entendiendo el orden de los bytes Big y Little Endian
- Unicode y tú
- Un poco de diddy sobre formatos de archivos binarios
- Algoritmos de clasificación