viernes, 22 de junio de 2007

Números

Me piden que cuente cómo funciona eso de la numeración hexadecimal. Trataré de no aburrir.

UnukTodo empezó con Unuk, troglodita de profesión y homo-sapiens aficionado, dándole vueltas a un asunto que le traía de cabeza desde hacía unas lunas. Verán, Unuk estaba seguro de que tenía más pieles de oso cavernario que Doshek, su vecino de la cueva de al lado, porque era evidente que su montón era más grande. Sin embargo, cuando trató de presumir ante Tresuka, se quedó tan sin palabras como un vulgar antropoide al tratar de explicarle cuánto más grande era su montón.

Así que allí llevaba un buen rato intentando inventar los números o algo que le permitiera cuantificar las cosas exactamente.

Empezó a pasar las pieles desde el montón a otro sitio y cada vez que movía una piel se le ocurrió estirar un dedo de la mano. ¡Aquello funcionaba! Resultó que tenía "todos los dedos menos el gordo y el pequeño" pieles. Para abreviar, decidió que eso eran tres pieles, en homenaje a Tresuka.

Se fue luego a la cueva de Doshek y, cuando éste no miraba, movió sus pieles de sitio contando con los dedos como había hecho con las propias. Resultó que Doshek tenía "el dedo gordo y el de al lado" pieles. ¡Menos que él!, como siempre había sospechado. Llamó a esta cantidad dos, por ser las pieles que tenía Doshek.

Un problema mucho más complicado surgió poco tiempo después dentro de la incipiente ciencia de las matemáticas iniciada por Unuk. Un día en que Tresuka, ya felizmente unida a Unuk por los sagrados lazos del garrotazo, le estaba despiojando, se puso a contar los bichos que ella iba dejando aplastados sobre una piedra y se quedó rápidamente sin dedos en una mano lo que le obligó a empezar a utilizar la otra. Estiró el pulgar, el de al lado, el otro, el otro... ¡Ya le quedaba solamente el pequeño! ¿Qué haría después? ¿Contar con los dedos de los pies? ¡Imposible! ¡No podía estirar y encoger los dedos de los pies como un vulgar australopiteco! ¡Él era un cromañón! Y orgulloso de serlo, además.

Así que cogió un palo y, tras estirar el último dedo, hizo una marca en el suelo y empezó a contar con los dedos otra vez desde el principio, como si no hubiera pasado nada. Al terminar la sesión de despiojado, comprobó que tenía dos marcas en el suelo y tres dedos estirados. ¡Veintitrés bichos!, exclamó ufano. ¡Seguro que muchos más que Doshek! ¡Ja!

Igual me he dejado llevar un poco pero... más o menos debió ser así. La circunstancia de que el ser humano tenga diez dedos seguramente ha influido enormemente en el hecho de que numerosas culturas hayan adoptado el diez como base de numeración aunque, a pesar de ello, no debemos dejarnos engañar por las apariencias y considerar que es algo "natural". Al contrario. La elección de una base de numeración es algo totalmente arbitrario. Muchas otras culturas, a lo largo de la historia, han elegido otros números como bases de sus sistemas. Aún podemos percibir los ecos de esas culturas en la nuestra si consideramos que los huevos aún se cuentan por docenas (conjuntos de 12) y no por decenas (conjuntos de 10) o que en una hora hay sesenta minutos y no diez o cien, como sería de esperar.

El caso es que estamos tan acostumbrados a utilizar el sistema de numeración decimal que nos parece completamente fuera de lugar utilizar otra base. Los programadores de ordenadores no piensan lo mismo, claro, acostumbrados a utilizar sistemas con base 2 (binario), 8 (octal) ó 16 (hexadecimal).

¿Pero qué significa eso de "base de numeración"? No queda más remedio que hacer otro poco de historia y contar una de romanos.

Los romanos, como los griegos antes que ellos, utilizaban las letras de su alfabeto para representar los números. La I representaba el 1, la V el 5, la M el mil, etc. Cuando querían representar una cantidad, simplemente iban agregando las letras adecuadas hasta alcanzar la cifra deseada. Por ejemplo, la cifra 2.007 se representaría como MMVII.

En principio, dado que cada letra tiene un valor propio, no hace falta disponer las letras de ninguna forma determinada (aunque suelen utilizarse ciertas convenciones que no detallaré ahora). Para leer el número basta con sumar los valores de todas las letras:

M+M+V+I+I = 1000+1000+5+1+1 = 2007

Este sistema, aunque sencillo en apariencia, hace muy complicado cualquier cálculo, sobre todo si están implicadas cifras relativamente grandes. Hagan la prueba e intenten hacer una operación matemática, aunque sea sencilla, con números romanos. Una locura.

La introducción y asimilación de los "sistemas posicionales" en los que los números, además de tener un valor por sí mismos, adquieren otro valor simbólico dependiendo de la posición que ocupan en la cifra supuso un cambio tan radical en la Europa medieval que, en un principio, se llegó a considerar si no sería cosa de brujería algo que permitía resolver tan fácilmente, cálculos que eran tan complicados hasta entonces.

Veamos sucintamente cómo funciona un sistema posicional, aunque supongo que lo saben de sobra.

Con el sistema de numeración romano, en una cifra como por ejemplo III, las tres íes valen 1, cada una, independientemente de la posición que ocupan mientras que en el nuevo sistema decimal (que es de tipo posicional), en la cifra 111, el uno de más a la derecha vale, efectivamente, 1 pero el siguiente vale 10 y el de más a la izquierda vale 100. Esto es así a resultas de utilizar el 10 como base pues cada posición tiene un valor que es igual a una potencia de 10.

De derecha a izquierda, los valores de cada posición son estos (el símbolo ^ representa la operación de exponenciación, es decir, se lee como "elevado a"):

10^0 = 1 (unidades)
10^1 = 10 (decenas)
10^2 = 100 (centenas)
10^3 = 1.000 (millares)
10^4 = 10.000 (decenas de millar)
10^5 = 100.000 (centenas de millar)
etc.

De esta forma, la cifra 2.047 representa la siguiente operación (el * representa la multiplicación):

2*10^3 + 0*10^2 + 4*10^1 + 7*10^0

O, lo que es lo mismo: 2*1000 + 0*100 + 4*10 + 7*1

O sea: 2000 + 0 + 40 + 7

En definitiva: 2.047

He mantenido indicada, a propósito, la operación con ese cero en las centenas para hacer resaltar la extrema importancia del cero en los sistemas de numeración posicionales.

Pero tampoco voy a extenderme mucho más porque me da la impresión de que me estoy pasado con el nivel de detalle. Ya sé que son cosas archisabidas, pero me parecía importante recordarlas para comprender lo que viene a continuación que es, ¡por fin!, a donde quería llegar desde el principio.

El sistema "hexadecimal", utiliza el 16 como base de numeración lo cual quiere decir que los valores de las posiciones vienen dados por potencias de 16 y no de 10 como ocurría antes con el sistema decimal. De derecha a izquierda, los valores de las posiciones son las siguientes:

16^0 = 1 (cualquier número elevado a cero da como resultado 1)
16^1 = 16 (cualquier número elevado a uno da como resultado el mismo número)
16^2 = 256
16^3 = 4.096
16^4 = 65.536
16^5 = 1.048.576
etc.

De este modo, la cifra hexadecimal &2047 representa la operación:

2*16^3 + 0*16^2 + 4*16^1 + 7*16^0

O, lo que es lo mismo: 2*4096 + 0*256 + 4*16 + 7*1

O sea: 8192 + 0 + 64 + 7

En definitiva: 8.263

He usado el símbolo & para indicar que se trata de una cifra en base hexadecimal y no el número decimal 2.047. Como hemos visto, dicha cifra equivale a ocho mil y pico en decimal.

Hay un problemilla que aún hay que resolver y es que, al utilizar la base 16 necesitamos 16 símbolos distintos para los 16 primeros números (del cero al quince).

Para los diez primeros (del cero al nueve) no hay problema pues podemos usar los viejos y conocidos números arábigos pero para los números del 11 al 15 se necesitan símbolos nuevos. En realidad, en vez de andar inventando símbolos, se acordó que se utilizarían las letras del alfabeto latino, de la A a la F de modo que A tiene valor 10, B es 11, C es 12, D es 13, E representa al 14 y F al 15.

A modo de ejemplo, el número hexadecimal &B2F será, por tanto:

11*16^2 + 2*16^1 + 15*16^0 = 2816 + 32 + 15 = 2863

El uso de este otro sistema "alternativo", que puede parecer un poco tonto, tiene su importancia en matemáticas y, sobre todo, en informática donde el manejo de números grandes se simplifica notablemente usando base 16. Sí, sí, los ordenadores utilizan el binario, que es base dos, pero resulta que 16 es una potencia de dos (2^4=16) por lo que pasar de una base a otra es muy sencillo y cada grupo de dos dígitos hexadecimales, representa a un grupo de 8 dígitos binarios, o, como se dice en el argot, un byte.

¡Qué lejos parece quedar de esto de los bytes y del mundo digital el pobre Unuk! Pues no se crean: dígito, que es sinónimo de número, viene de la palabra latina "digitus", que no significa otra cosa que "dedo".

No hay comentarios: