El lector podría pensar que si usa un procesador de texto que manipula letras y otros símbolos en muy diversas fuentes, y también ve imágenes y películas, y escucha música, no es posible que todo eso sean sólo números binarios.
En efecto, para los humanos no lo son, nosotros vemos claramente en la pantalla una letra "A" en arial a 12 puntos o una imagen hecha de millones de puntitos de colores o escuchamos el sonido de una guitarra. Todo esto, como ya se ha mencionado, se representa dentro de la computadora como bits. El truco está en discretizar y codificar.
El mundo discreto contra el mundo continúo
Como se ha explicado antes, cualquier cosa que pueda estar en un estado dentro de un conjunto finito de estados, se puede representar mediante bits. Un número entero en cierto rango, por ejemplo entre -1000 y +1000, se puede representar mediante bits, asignándole una secuencia de bits a cada valor en el rango. Un número real en ese rango no, ya que hay una infinidad de números reales en el rango. Así que lo que se hace cuando se requiere trabajar con números reales en una computadora es discretizarlos; es decir, aproximarlos mediante un conjunto finito y representar este conjunto mediante bits.
Usando esta misma idea es como se representan imágenes o sonidos en la computadora. En el ámbito auditivo, se puede pensar que un sonido es una onda que se propaga en el aire, y se representa mediante una función continua que nos dice cómo va variando su intensidad en el tiempo.
Curiosidades
Las computadoras modernas despliegan letras en la pantalla coloreando sus pixeles con colores adicionales al blanco y el negro para mejorar su apariencia. Ésta es una ampliación de cómo despliega en la pantalla una "a" una computadora Mac (una PC lo haría un poco diferente). Si la miras de lejos se ve sólo negra, pero más bonita.
Curiosidades
El filósofo griego Zenón de Elea (circa 450 antes de nuestra era) propuso varias paradojas para cuestionar las nociones de tiempo y espacio de su época que aún hoy son relevantes. La más famosa es la de Aquiles y la Tortuga, que nos hace pensar en lo siguiente: para recorrer 100 metros primero hay que recorrer 50, luego la mitad de los 50 restantes, es decir, 25. Pero para recorrer esos 25 metros, primero hay que recorrer la mitad, y luego el resto. La consecuencia es que nunca se llega a la meta, ya que cada vez que se está a punto de llegar, aún hay que recorrer primero la mitad de lo que queda y luego la otra mitad. Algo similar sucede en cuanto al tiempo: lo que se tarda en recorrer los 100 metros es la suma de una infinidad de intervalos de tiempo, cada uno de la mitad de tamaño que el anterior.
En la figura 3 se observan las ondas producidas por un diapasón que emite un cierto tono, luego otro que emite un tono más agudo y, en tercer lugar, cómo se vería la onda de los dos diapasones sonando simultáneamente. En la siguiente figura se ve cómo muestreando —es decir, midiendo la señal a intervalos de tiempo regulares— se obtiene una aproximación a la amplitud de la onda en cada instante de tiempo de la muestra. Las muestras se representan mediante bits, discretizando la amplitud continua. El resultado es una secuencia de números expresados en bits, que representan el sonido con mayor o menor calidad, en función de qué tan precisa sea la aproximación a la onda elegida, en sus dos dimensiones: qué tan frecuentemente se muestree la onda (distancia entre las flechas rojas) y cuántos bits se le asignen a cada muestra (longitud posible de cada flecha).
Códigos en la vida cotidiana
Codificar es representar una cosa usando otra. Levantar el dedo pulgar de la mano hacia arriba es una manera de codificar el mensaje "todo salió bien"; SOS es el código universal para pedir auxilio; 10,4 es el código que suele usar la policía para decir "de acuerdo", y tango es el código que se usa en toda transmisión militar radial de la OTAN para representar la letra "t". En la vida cotidiana usamos códigos todo el tiempo: la CURP (clave única del registro de población) es un código que identifica individualmente a cada ciudadano mexicano. El número de cuenta que asigna la UNAM a cada alumno es lo que la institución usa para representarlo e identificar unívocamente su historial académico.
Representando texto
Para representar texto en la computadora se requiere de codificaciones eficientes y universales que permitan intercambiar eficientemente textos en diversos idiomas. En un procesador de texto hay un código que sirve para especificar el tipo de letra por usar, para indicar que una letra está en fuente Arial, uno para indicar su tamaño y otro para indicar de qué letra se trata. Con base en éstos, se determina qué dibujar en la pantalla y cómo hacerlo.
Para representar textos se pretende usar un código capaz de representar cualquier símbolo de los que se utilizan en cierto conjunto de idiomas; lo que suele hacerse en ese caso es definir un cierto tamaño de representación fijo, digamos 16 bits, y luego definir qué símbolo alfabético es representado por cada uno de los números binarios posibles de 16 bits.
A esto se le llama un código de bloque, porque todos los códigos miden lo mismo (16 bits en nuestro ejemplo). El código ASCII, que se solía utilizar hasta fines del siglo pasado, era de ocho bits. El código Unicode usado hoy día pretende representar todo carácter de cualquier idioma.
Compresión
En la actualidad es de fundamental importancia almacenar datos en la computadora de una manera eficiente, comprimiéndolos lo más posible, ya que la cantidad de datos que se manejan crece constantemente. Por otro lado, también en la naturaleza la compresión es muy importante, por las mismas razones de eficiencia y, más aún, podría decirse que todo aprendizaje consiste en comprimir información.