sábado, junio 12, 2004

Contando en base 2

Todos los días hablamos de bits, bytes, K y megas, pero ¿sabemos siempre lo que significan? En este artículo veremos cómo cuentan los ordenadores y qué significan estos términos.

Contar en base 2 no es nada nuevo para los matemáticos. Los sistemas de numeración en diferentes bases son usados para resolver más fácilmente diversos tipos de problemas. En el caso de los ordenadores, es determinante el hecho de que se basan en circuitos capaces de adoptar dos estados (básicamente encendido/apagado) lo cual puede representarse perfectamente con las cifras 0 y 1, las únicas de que se dispone en el sistema de numeración binario o de base 2.

En un sistema de numeración, la base nos indica la cantidad de cifras distintas de que disponemos y su valor de posición. El valor de posición es una potencia de la base elevada a n, siendo n el número que indica la posición de la cifra comenzando por la derecha e iniciando la cuenta en 0. El valor de un número es la suma del valor de cada cifra multiplicado por el valor de posición correspondiente.

El sistema de numeración más utilizado es, sin duda, el de base 10, probablemente gracias a que los seres humanos empezaron a contar utilizando los dedos de las manos como recurso y tenemos 10 dedos en total. En base 10, las cifras disponibles son 0, 1, 2, 3, 4, 5, 6, 7, 8, y 9. El valor de posición es una potencia de 10: 100=1, 101=10, 102=100, 103=1000, etc. Así, el número 325 es igual a: 5 x 100 + 2 x 101 + 3 x 102.

Aunque el sistema en base 10 es muy fácil de utilizar para los humanos, los ordenadores se las entienden mejor utilizando el sistema en base 2 o binario. En este sistema, las cifras disponibles son 0 y 1, y el valor de posición es una potencia de 2: 20=1, 21=2, 22=4, 23=8, etc. De este modo, un número binario podría ser, por ejemplo, 10011, cuyo valor sería igual a 1×24 + 0×23 + 0×22 + 1×21 + 1×20 = 19.
Bits y bytes

Los números binarios de una sola cifra no aportan mucha información ya que sólo pueden informar de la presencia o ausencia de algo. A cada cifra binaria la llamamos bit (palabra que supuestamente es una abreviatura del inglés binary digit, o sea, dígito binario). Necesitamos varias cifras binarias para representar un mayor número de estados. Es una buena idea seguir el patrón que nos marcan las potencias de 2, fundamentalmente porque de ese modo nos podemos aprovechar de algunas particularidades de las cifras binarias que comentaremos más adelante, como la de servir de señaladores o banderas (flags en inglés).

De este modo, 8 cifras binarias pueden ser un buen punto de partida. Con 8 cifras binarias (o bits) podemos representar 256 valores (desde 0 hasta 255). Con 16 cifras (o bits) obtendríamos 65.536 valores.

De hecho, los primeros ordenadores comerciales utilizaban procesadores capaces de manejar datos de 8 bits de tamaño (o, lo que viene siendo lo mismo, capaces de manipular 8 bits simultáneamente). A los grupos de 8 bits se les comenzó a llamar bytes u octetos. A medida que los procesadores fueron aumentando su capacidad se acuñó también el término palabra para designar el tamaño en bits que podría manejar el procesador y así los tenemos de 16, 32 o 64 bits, o sea, 2, 4 y 8 bytes.

Los bytes comenzaron a usarse como unidades básicas a la hora de hablar de capacidad de un ordenador, ya fuera refiriéndose a la memoria o al almacenamiento en disco de los archivos. Sin embargo, fue necesario utilizar unidades de orden superior ya que hasta un texto relativamente breve puede ocupar varios miles de bytes (cada carácter se representa mediante un byte). La unidad de orden superior utilizada en primer lugar fue el Kilobyte (KB), equivalente a 1.024 bytes (de nuevo, una potencia de 2: 210 para ser exactos).

El crecimiento de la capacidad de los ordenadores depende del abaratamiento de los costes del hardware necesario, así como del aumento de capacidad de los procesadores para gestionarlo. La siguiente unidad de orden superior fue el Megabyte (MB), equivalente a 1020 bytes, o lo que es lo mismo, 1.024 KB.

Actualmente, ya se ha convertido en habitual hablar de capacidades del orden de los Gigabytes (GB), que equivalen a 1030 bytes, o sea, a 1.024 MB. En resumen:

Unidad Bytes
Kilobytes 1.024
Megabytes 1.048.576
Gigabytes 1.073.741.824

Banderas ¿al viento?
Una ventaja de las cifras binarias es que se pueden usar como banderas o flags con las que indicar el estado de activación o desactivación de algo. Los programadores utilizan frecuentemente esta facultad porque permite almacenar bastante información en poco espacio. Así, por ejemplo, podríamos representar toda la información de estilos tipográficos de un carácter de un texto: negrita, cursiva, subrayado, hueca, sombra, etc. en un sólo byte, asociando cada estilo a un bit y viendo si su valor es 1 ó 0, o modificándolo si es el caso.

En los tiempos en los que el espacio de almacenamiento era un lujo, compactar en lo posible la información era una obligación de los programadores. En una aplicación de bases de datos, por ejemplo, era preferible alamcenar un código compacto varias informaciones del tipo cierto/falso. Por ejemplo, una factura podría tener flags para indicar si está pagada, la forma de pago, si el pedido está entregado, etc. En lugar de usar un campo para cada uno de esos datos, se podría crear un código basado en números binarios para almacenar esa información en un único byte.

Este tipo de técnicas se mantiene en muchos programas verticales (aplicaciones hechas a medida para un tipo de tarea, como la gestión de una farmacia, o de un punto de venta) y de ahí la aparente arbitrariedad de ciertos códigos. Afortunadamente, este tipo de estrategias se va ocultando al usuario que se encuentra interfaces más inteligibles por humanos y menos supeditadas a las necesidades del ordenador.
Contar en base 16

Una de las desventajas de la numeración binaria es que requiere números relativamente largos y que resultan confusos para ser manejados por personas. Para facilitar este manejo, se ha recurrido al sistema de numeración en base 16 o hexadecimal.

En base 16 disponemos de 16 cifras: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (las letras tienen los valores decimales de 10 en adelante) y el valor de posición es una potencia de 16. De hecho, 16 es una potencia de 2 (24).

Los números binarios de cuatro cifras (0 a 1111, o sea, 0 a 15) se pueden representar con una sola cifra hexadecimal. Esto hace que sean más fáciles de leer para los humanos y más fácil operar con ellos. Con la práctica, es relativamente fácil memorizar las equivalencias entre números binarios y hezadecimales y convertir entre uno y otro sistema sin dificultades con una tabla como la siguiente:

Decimal Binario Hexadecimal
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 11111 F

Es raro que tengas que enfrentarte al uso de numeración hexadecimal, aunque es frecuente en el ámbito del diseño de páginas web ya que los programas suelen especificar los colores del espacio RGB (Rojo Verde Azul, como el de los monitores de ordenador) mediante un código hexadecimal de 6 cifras. Cada par de cifras, de izquierda a derecha y respectivamente, representa el componente de color Rojo, Verde y Azul.

Cada uno de los componentes puede adoptar 256 niveles, desde 0 (negro) al máximo de color. El total de colores que se pueden representar así es de 2563 = 16.777.216. La ventaja de utilizar el hexadecimal es lo fácil que resulta leer el número y distinguir el peso de cada componente.

Así, por ejemplo, un amarillo muy claro es #FFFFCC, o sea, que el rojo y el el verde están al máximo y el azul bastante alto, lo que da un resultado próximo al blanco (#FFFFFF).
Fran Iglesias/ http://www.macintec.info/archivos/teoria/000040.html