20 de febr. 2008

Escribir binario en binario

¿cómo representar con unos y ceros una letra o una palabra?. Parece un poco más complejo y, de alguna forma, así lo es. De hecho, para resolver este problema, no alcanza la matemática sino más bien empiezan a jugar un rol fundamental los estándares.

La solución al problema de la representación de letras (y todo tipo de caracteres no numéricos) es la definición de un (o más de uno) estándar en donde a cada caracter se le asigna un número (en decimal digamos) correspondiente. De esta forma matemáticamente no hay un problema; ya sabemos convertir un número decimal en binario. Veamos un ejemplo simple y tonto que a mí me encantan. Yo tengo los números decimales 0, 1, 2 y 3. Puedo armar la tabla con los correspondientes números en binario:

0 - 00

1 - 01

2 - 10

3 - 11

Puedo ahora, agregar a cada valor un caracter que representaré con ese valor, como por ejemplo:

0 - 00 - a

1 - 01 - b

2 - 10 - c

3 - 11 - e

De esta forma, yo puedo representar palabras simples “uniendo” el valor de cada caracter y mostrandolo en binario, por ejemplo:

bebe - 1313 - 01110111

beba - 1310 - 01110100

beca - 1320 - 01111000

Creo que la explicación hasta aquí es suficiente para entender la idea. En la vida real, existen diferentes tablas de conversión de caracter a binario pero la más popular (y antigua más que nada) es la llamada ASCII (acrónimo inglés de American Standard Code for Information Interchange — Código Estadounidense Estándar para el Intercambio de Información). Este es el estándar más utilizado para mantener la relación carácter-número. Muchos de nosotros la hemos utilizado (posiblemente sin saberlo) cuando en los teclados antiguos, utilizabamos la tecla Alt para generar algunos caracteres especiales. Por ejemplo, utilizabamos el Alt+64 para hacer la arroba (@). Es decir, la arroba se corresponde con el valor 64 en el código ASCII. En un principio, el ASCII estaba representado por 7 bits (un valor binario de 7 dígitos) por lo que se pueden representar 128 valores diferentes (el 1111111 en binario es dicho valor en decimal). Los primeros 32 valores se utilizan para caracteres de control como el salto de línea (enter) o el escape. Los siguientes 96 valores representan los caracteres imprimibles, ellos son los siguientes:

! ” # $ % & ‘ ( ) * +, -. / 0 1 2 3 4 5 6 7 8 9 :; < = > ?

@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _

` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~

Años más tarde de la creacíon del código ASCII, se creo el ASCII extendido. Este agrega un bit más quedando cada valor de 8 bits (un uno o un cero más) y pudiendo formar ahora 256 caracteres. De esta forma, los primeros 128 valores coinciden con la tabla ASCII clásica y se agregan nuevos caracteres hasta el valor 240. Entre estos nuevos caracteres, se encuentran las vocales con acentos, las eñes (ñ - Ñ) y la arroba, entre otros. La tabla ASCII extendida completa puede ser consultada en el sitio www.asciitable.com. A forma de resúmen, podemos observar que la creación de un estándar fue lo que soluciona el problema de la representación de letras en binario ya que matemática seguimos haciendo lo mismo que al pasar números de decimal a binario. Espero poder de esta forma “cerrar” las ideas básicas del porqué las compus utilizan unos y ceros y cómo lo hacen con los símbolos simples (números y palabras). Antes de terminar, puede quedar una duda más: suponiendo que tengo un valor cualquiera, digamos el 100 (en decimal), es decir el 1100100 en binario. ¿cómo sabe la Pc si se está representando el número 100 o el caracter d (ver tabla ascii)? Para explicarlo de forma simple y no dejar a la espera de los siguientes post al respecto; digamos que lo que importa es el contexto. Cuando en la Pc hay algún tipo de acción, el ordenador previamente sabe en qué formato se le está pasando la información (¿estoy leyendo un número o un código ascii?). Es decir, supongamos que nos comunicamos entre nosotros y yo les digo: “les paso un número binario: 1100010011010010110111001100001011100100110100101101111″. Obviamente que ninguno de nosotros se va a poner a convertir este valor a decimal pero para que se hagan una idea estamos hablando de un valor de más de 1 billón en sistema decimal. Pero si yo les dijera en cambio que les paso el mismo valor pero en código ascii se podría leer tranquilamente el valor antes mencionado. En un principio, simplemente se lo debe dividir en grupos de a 8 para que quede algo así:

01100010 01101001 01101110 01100001 01110010 01101001 01101111

Luego puedo traducir cada valor en decimal ya que estamos hablando de valores más pequeños:

01100010 01101001 01101110 01100001 01110010 01101001 01101111

98 105 110 97 114 105 111

Y finalmente podemos utilizar la tabla ASCII para convertir a caracteres y obtener la palabra:

01100010 01101001 01101110 01100001 01110010 01101001 01101111

98 105 110 97 114 105 111
b i n a r i o
Siempre en la computadora es importante conocer el contexto para poder comprender qué tipo de datos se están transmitiendo. Es decir, la computadora transmite “bloques” de información que tienen un cartel pegado que indica qué tipo de “bloque” se está transmitiendo.
Para quienes quieran desafiar su entendimiento (espero que se haya entendido), les dejo esta imágen que encontré en Codigo Geek. A ver si pueden leer el texto (utilizando la tabla ASCII) sin recurrir a la web de origen donde está la repuesta.


0 comentaris:

Publica un comentari a l'entrada