Exponsor

CURSO TÉCNICO INSTALADOR DE ENERGÍA SOLAR TÉRMICA

Visita el siguiente enlace: http://enersolartermica.blogspot.com.es/ ¡No pierdas esta magnifica oportunidad de poder formarte en esta profesión con gran demanda de empleo! Ahora por oferta de lanzamiento y por tiempo limitado puedes adquirir este curso por solo 9,95€, cuando su valor de mercado es de 49€.

lunes, 2 de marzo de 2009

LOS NÚMEROS BINARIOS ( I )

Desde que el hombre aprendió a hacer uso de razón, se vió en la necesidad de contar de alguna manera los objetos que le rodeaban y, muy en especial, los que poseía. El florecimiento del comercio en los tiempos antiguos agravó aún más la necesidad de utilizar un sistema numérico preciso y fácil de utilizar.

De esta manera, el hombre empezó a contar de diez en diez (que es lo que hoy conocemos como el sistema decimal) influenciado por el hecho de que poseía diez dedos. Conforme ascendía la numeración, cada unidad numérica recibía un símbolo diferente (por ejemplo, 3, 4, 5 en la numeración arábiga). Después del nueve, se tomaba el símbolo que representaba la menor cantidad de unidades (el 1) y se le agregaba un cero, con lo cual se obtenía la cantidad décima. La operación empezaba de nuevo su conteo ascendente hasta llegar a diecinueve, después de lo cual se aumentaba la cifra a la izquierda en una unidad poniéndose un cero a la derecha de la misma, repitiéndose el proceso indefinidamente. Podemos observar que, sin el cero, se habría requerido un símbolo diferente para cada número mayor que nueve (por ejemplo, el símbolo A para el diez, el símbolo B para el once, el símbolo C para el doce, etc.). En efecto, sin el cero, cualquier sistema numérico resulta extremadamente complejo e impráctico (podemos imaginar los problemas que padecían los romanos cuando en su sistema de numeración romana trataban de multiplicar una cantidad por otra, cuando trataban de multplicar algo como XXIII por LIV en vez de lo que para nosotros es 23 por 54). No en vano se ha proclamado la invención del cero como uno de los más importantes avances en la historia de la humanidad.

Nuestra atención se vuelve ahora hacia un problema filosófico. Supongamos que el hombre en vez de tener cinco dedos en cada mano hubiese tenido tres. ¿Cuál habría sido nuestra forma de contar?

Un momento de reflexión nos indica que nuestro sistema numérico en tal caso no habría sido muy diferente del sistema decimal que conocemos en la actualidad. Al tener tres dedos en cada mano, nuestra inclinación natural habría sido contar de seis en seis, de la misma manera en que el hombre moderno con cinco dedos en cada mano cuenta de diez en diez. Al contar de seis en seis, la numeración ascendería de la manera siguiente:



Notamos que el sistema numérico basado en seis dedos, el sistema numérico base seis, nunca utiliza el símbolo 6, de la misma manera que en el sistema númerico base diez (o sistema decimal) no existe ningún símbolo especial para representar el número diez. Notamos también que el conteo ascendente en el sistema numérico base seis procede en forma similar al conteo ascendente en el sistema numérico base diez. Al llegar al 5, se toma el símbolo que representa la menor cantidad de unidades (el 1) y se le agrega un cero, obteniéndose así la siguiente cifra. El proceso se repite indefinidamente de modo similar al proceso utilizado en el sistema decimal. El número que sigue a 555, por ejemplo, sería 1000. Nótese que una colección de ocho objetos en el sistema decimal se representa con el número 8 mientras que en el sistema numérico base seis se representa con el número 12 (esta equivalencia se representa simbólicamente como 810 = 126).

Por extraño que el sistema numérico base seis nos parezca, debemos recordar que éste no nos sería tan extraño si tuviésemos tres dedos en cada mano.

Vemos pues, que la única razón por la cual contamos de diez en diez es porque tenemos diez dedos en ambas manos. Vemos también que son igualmente posibles otros sistemas numéricos, no sólo el sistema numérico base seis, sino también el sistema numérico base cuatro, el sistema numérico base siete, etc.

Podemos convertir un número cualquiera de nuestra base decimal a una base menor (por ejemplo, un número en sistema decimal a su equivalente en sistema base tres) por el método de la división sucesiva. Este método se lleva a cabo de la siguiente manera:

(1) Se divide el número decimal dado entre la base al cual queremos convertir al número, y se destaca el residuo obtenido.

(2) El cociente obtenido de la división anterior se vuelve a dividir nuevamente entre la base a la cual queremos convertir el número, y se destaca el residuo así obtenido.

(3) El procedimiento anterior se repite hasta que ya no es posible seguir dividiendo sin obtener una fracción con punto decimal. Al llegar a esta etapa, se destacan el dividendo obtenido así como el residuo.

(4) El número correspondiente a la base menor se obtiene escribiendo como el primer dígito el dividendo obtenido en el último paso anterior, y poniendo como el segundo dígito (a su derecha) el residuo obtenido del también del último paso anterior.

(5) Para el tercer dígito, escribimos a la derecha del resultado anterior el residuo obtenido de la penúltima división.

(6) El paso anterior se repite hasta que se hayan agotado todos los dígitos.

Para convertir un número en una base menor al sistema decimal (por ejemplo, un número en el sistema base siete a su equivalente en sistema decimal), se multiplica la primera cifra del número por la base menor. Al producto resultante se le agrega la segunda cifra del número y se vuelve a multiplicar por la base menor. El procedimiento se continúa hasta agotar las cifras, después de lo cual se tendrá el número decimal.

De un interés especial para nosotros es el sistema numérico base dos o sistema binario.

Si el hombre hubiera tenido tan solo un dedo en cada mano, entonces para ir contando "hacia arriba de uno en uno" en el sistema base dos o sistema binario, y tomando en cuenta que así como en el sistema decimal o sistema base diez al que estamos acostumbrados no existe un símbolo especial para representar el número diez tampoco en el sistema binario existirá un símbolo especial para representar el número dos, el conteo binario ascendente "hacia arriba" procedería de la manera siguiente:



El número binario 110 que se ha destacado con fondo de color amarillo es el que se utiliza para identificar con el símbolo "6" lo que nosotros por costumbre llamamos un sexto objeto o una colección de seis cosas. En una canasta de manzanas, el objeto, que podría ser la sexta manzana, sigue siendo el mismo independientemente de los símbolos que usemos para identificarlo. Lo único que cambia es nuestra forma de representarlo, que como hemos visto es hasta cierto punto arbitraria. (En esta lista de números binarios se ha destacado también, con fondo color ciano, el número binario que representa a un onceavo objeto.) Y así, en el sistema binario, tal vez al ir al mercado a comprar unas naranjas le diríamos a la encargada del puesto algo como "por favor deme 101 naranjas". Y si esto nos parece raro, hay que meditar que para los individuos de una civilización alienígena que tuviesen siete dedos en cada mano, dando un total de 14 dedos (con lo cual su sistema de numeración seguramente sería base 14), nuestro sistema de contar decimal tal vez les parecería sumamente extraño. Todo es cuestión de perspectiva.

¿Y por qué es de tanto interés para nosotros el adentrarnos en un sistema numérico como el sistema binario, como si no tuviéramos ya suficientes problemas con el sistema decimal?

Al tratar de utilizar circuitos eléctricos para llevar a cabo operaciones matemáticas (o bien, operaciones de control), nos encontramos con el hecho de que existen únicamente dos estados posibles que se pueden utilizar para llevar a cabo procesamiento de información. Uno es el estado de encendido, lo cual podemos representar con el número uno ("1"). El otro es el estado apagado, el cual representamos como cero ("0").

Imaginemos una hilera de cinco focos, en la cual el primer foco (a la izquierda) está apagado, los dos focos siguientes encendidos, el cuarto foco apagado y el quinto foco encendido. Representando los focos encendidos con un "1" cada uno y los focos apagados con un "0" cada uno, obtenemos la siguiente representación:

01101

Este número representa el número 13 en el sistema decimal. Cada dígito del número binario, encendido o apagado, se conoce como bit. Una serie de varios bits en sucesión como la arriba mostrada se conoce comunmente como palabra binaria o simplemente palabra. Así pues, siguiendo la costumbre legada de los árabes sarracenos, en la numeración binaria, al igual que en la numeración decimal en la cual conforme se va contando hacia arriba las cifras de magnitud creciente correspondientes a las unidades, las decenas, las centenas, etc. se van escribiendo hacia la izquierda, también en la numeración base 2 se acostumbra escribir los números binarios creciendo hacia la izquierda, y al hacer esto el "bit" de menor magnitud que es puesto en el extremo derecho es conocido como el bit menos significativo (en inglés: Least Significant Bit ó LSB), mientras que el "bit" de mayor magnitud es puesto en el extremo izquierdo y es conocido como el bit más significativo (en inglés: Most Significant Bit ó MSB).

A continuación se muestra una tabla conocida como tabla de equivalencias:



Usando tablas como ésta es posible acortar la conversión de un número en sistema binario a sistema decimal y viceversa. Por ejemplo, si se desea encontrar el equivalente decimal de la palabra 10110, notamos que:

10110 = 10000 + 100 + 10

= 16 + 4 + 2

= 22

Veamos esto mismo desde otro punto de vista, desde el punto de vista de la representación de un número usando potencias de dos. La tabla anterior de equivalencias puede ser representada usando potencias del número dos (en donde por definición una exponenciación a la potencia cero es tomada como la unidad):

20 = 1

21 = 2

22 = 2x2 = 4

23 = 2x2x2 = 8

24 = 2x2x2x2 = 16

25 = 2x2x2x2x2 = 32, etc.

Teniendo esto en mente, podemos construír una tabla de potencias de dos como la siguiente:



Esta tabla, basada en las potencias del número dos (en donde por definición la exponenciación a la potencia cero es tomada como igual a la unidad) se utiliza de la siguiente manera: Supóngase que queremos convertir el número decimal 59 a su equivalente en sistema binario. Este número es mayor que 32 pero es menor que 64, de modo tal que la primera cantidad que formará parte del mismo será 2.5=32. Si le sumamos el siguiente número inferior de la tabla, 2.4=16, la cantidad cumulativa será 48, la cual no excederá el número decimal 59, de modo tal que podemos agregar 2.4 al sumando cumulativo. Y si le sumamos el siguiente número inferior de la tabla, 2.3=8, la cantidad cumulativa será 56, la cual tampoco excederá el número decimal 59, de modo tal que podemos agregar 2.3 al sumando cumulativo. Sin embargo, no podemos agregar 2.2=4 porque la suma cumulativa excedería el número decimal 59, de modo tal que descartamos 2.2 como posible componente de la suma cumulativa. Procediendo de esta manera hasta agotar la tabla, vemos que el número decimal 59 se puede representar en potencias de dos de la manera siguiente:

59 = 32 + 16 + 8 + 0 + 1 + 1

59 = 25 + 24 + 23 + 0 + 21 + 20

Con esto, la representación del número 59 en ambas bases (la base decimal y la base 2) procede de manera inmediata consultando la tabla:

5910 = (100000)2 + (10000)2 + (1000)2 + (0)2 + (10)2 + (1)2

5910 = 1110112

Este resultado puede ser corroborado con el método de la división sucesiva.

Para el procedimiento inverso, esto es, convertir un número de cierta base a su equivalente en sistema decimal, podemos hacer tal cosa de manera sencilla llevando a cabo la expansión del número a través de la representación en las potencias del número en su base orignal. Por ejemplo, si queremos convertir el número binario 101001 a su equivalente en sistema decimal, la expansión sobre las potencias de dos se llevará a cabo de la siguiente manera:

1010012 = (1)25 + (0)24 + (1)23 + (0)22 + (0)21 + (1)20

1010012 = 32 +0 + 8 + 0 + 0 + 1

1010012 = 4110

Ahora bien; podemos sumar, restar, multiplicar y dividir en el sistema binario de la misma manera en la cual llevamos a cabo dichas operaciones en el sistema decimal.

LOS NÚMEROS BINARIOS ( II )

Existe una forma especial de representar los números decimales usando el sistema binario, para que estos se parezcan un poco más a la numeración que usamos (aunque no es notación binaria pura). Cada dígito decimal se representa por su equivalente por separado, sin llevar a cabo conversión alguna. Por ejemplo, el número 3497 se representa como sigue:



Esta forma de representación se conoce como el código decimal codificado binario BCD (del inglés Binary Coded Decimal).

Ahora nos plantearemos otra dilema filosófico un poco diferente al problema con el cual comenzamos este capítulo: Supóngase que el hombre en vez de tener cinco dedos en cada mano hubiese tenido ocho. ¿Cuál habría sido nuestra forma de contar? (El caso no es tan hipotético como pudiera creerse; hay personas que de nacimiento son portadoras de una falla genética que produce en ellas algo conocido como polidactilismo, lo cual es una expresión médica para designar la presencia de más de cinco dedos ya sea en las manos o en los pies; y aunque pudiera parecer que existe alguna ventaja en poseer una mayor cantidad de dedos en ambas manos o pies que los cinco que actualmente tenemos, la evolución por alguna razón no ha favorecido una cantidad mayor de dedos).

Nuevamente, un momento de reflexión nos indica que nuestro sistema numérico en tal caso no habría sido muy diferente del sistema decimal que conocemos en la actualidad, excepto que estaríamos contando de dieciseis en dieciseis. Al tener una abundancia de dedos en ambas manos, muy posiblemente habríamos inventado algún símbolo único como el símbolo A para representar en dicho sistema numérico base-16 lo que hoy denotamos como diez con dos símbolos (10). Para representar el equivalente del número decimal 11 nuestro doceavo dedo se podría haber representado con otro símbolo nuevo, como el símbolo B. De este modo, habríamos tenido un símbolo diferente para representar cada número hasta antes de llegar al número 16 (decimal). Y al llegar a lo que vendría siendo el equivalente del número 16 decimal, se tomaría el símbolo que representa la menor cantidad de unidades (el 1) y se le agregaría un cero, obteniéndose así la siguiente cifra. El proceso se repite indefinidamente de modo similar al proceso utilizado en el sistema decimal. Un conteo ascendente en este sistema numérico hexadecimal procede de la siguiente manera:

Base 10_____Base 16

0__________0
1__________1
2__________2
3__________3
4__________4
5__________5
6__________6
7__________7
8__________8
9__________9
10__________A
11__________B
12__________C
13__________D
14__________E
15__________F
16__________10
17__________11
18__________12
19__________13
20__________14
21__________15
22__________16
23__________17
24__________18
25__________19
26__________1A
27__________1B
28__________1C
29__________1D
30__________1E
31__________1F
32__________20



Para destacar un número como un número que está basado en el sistema hexadecimal, utilizamos una letra h ya sea al final del número o al principio del número o como subscripto del número. Así, el número 19 hexadecimal se vendría destacando con una de las siguientes representaciones:

19h

19h

Por extraño que nos parezca, este sistema numérico hexadecimal es muy utilizado en el área de las ciencias computacionales. La razón de su enorme utilidad radica en el hecho de que existe una relación sencilla entre las representaciones de un número binario puro y su equivalente en sistema hexadecimal cuando el número binario es un múltiplo de cuatro bits:


aaaaaBinario___Hexadecimal

0000________0
0001________1
0010________2
0011________3
0100________4
0101________5
0110________6
0111________7
1000________8
1001________9
1010________A
1011________B
1100________C
1101________D
1110________E
1111________F

lo cual simplifica enormemente la conversión de un sistema numérico a otro. Por ejemplo, si queremos encontrar el equivalente hexadecimal del siguiente número binario:

11000101000001101000000101011ooo

todo lo que tenemos que hacer es "separar" el número binario en grupos de cuatro bits:

1100 0101 0000 0110 1000 0001 0101 1ooo

tras lo cual podemos convertir directamente cada grupo individual en su equivalente hexadecimal:

C 5 0 6 8 1 5 8

Para convertir un número hexadecimal a binario, simplemente aplicamos el procedimiento inverso. Si queremos convertir el número hexadecimal AF37 a su equivalente binario, lo hacemos tomando en cuenta que A=1010, F=1111, 3=0011 y 7=0111. Así, el número hexadecimal de este ejemplo es igual a:

1010 1111 0011 0111

o en forma más abreviada (aunque un poco menos clara):

1010111100110111

Puesto que se requiere de muchos bits para poder representar un número de tamaño moderado, al leer un número de 32 bits almacenado en un registro como el siguiente:

1010 1111 0101 0111 0110 0001 0001 1011

es mucho más rápido y fácil para un humano escribir o leer:

AF57611B

que el número binario mostrado.

Al igual que en la numeración decimal existen y se manejan con frecuencia los números negativos, precedidos por un signo menos (-) puesto a la izquierda de los mismos, en la numeración binaria también existen y se manejan con frecuencia los números negativos. Sin embargo, en la numeración binaria para distinguir un número negativo de uno positivo no se acostumbra hacerlo con un signo de menos (-). Una forma de llevar a cabo algún tipo de distinción es antecediendo la cifra binaria con un "0" si la cifra es positiva (+) ó con un "1" si la cifra es negativa (-). Si reservamos el primer bit hacia la izquierda para representar el signo del número binario, entonces los siete bits restantes en una palabra binaria de un "byte" no son suficientes para codificar números decimales con suficiente precisión, y en tal caso se requieren por lo menos dos bytes para poder representar números decimales hasta 32 mil. Bajo la convención universal del signo que acabamos de dar:

00000001 representa al número decimal 1

10000010 representa al número decimal -2

Una desventaja de esta representación es que los números binarios de signos distintos no pueden sumados en la forma usual como se acostumbra hacerlo, ya que si sumamos los dos números binarios anteriores el resultado será 10000011, o sea -3, lo cual es incorrecto (la respuesta correcta debería ser -1). De cualquier modo, mantendremos esta representación hasta que encontremos en capítulos posteriores otra que nos permita llevar a cabo en forma correcta operaciones aritméticas con números de signos distintos en el sistema binario obteniendo siempre la magnitud correcta con el signo correcto. De cualquier modo, lo que no cambiará será el uso del primer bit reservándolo para denotar el signo de la cantidad.

Hemos hablado del uso de la numeración binaria para poder ir contando números enteros de uno en uno en el sistema base-2. Es posible que aquí haya algún lector que se pregunte: ¿será posible utilizar también el sistema binario para contar y medir fracciones, cantidades menores que la unidad, tal y como lo hacemos en el sistema decimal? La respuesta es afirmativa, y para poder lograrlo tenemos que introducir en la numeración binaria el mismo artificio que usamos para distinguir números enteros de números menores que la unidad: el punto, que en este caso en vez de ser el punto decimal será el punto binario.

Una fracción representa una división. Al igual que como ocurre en el sistema decimal, las fracciones en el sistema binario pueden ser escritas con un numerador y un denominador separados con una barrita horizontal:



En el sistema decimal las fracciones pueden ser escritas con un punto decimal. Ejemplo de ello son:



Del mismo modo, las fracciones en el sistema binario también pueden ser escritas utilizando un punto para ello, aunque en lugar de hablar de un punto decimal estamos hablando de un punto binario. Así:



Dicho de otra manera, para poder representar fracciones en el sistema binario, el principio sigue siendo el mismo. Los símbolos decimales para cantidades fraccionarias son construídos a base de décimas, centésimas (décimas de décimas), milésimas (décimas de décimas de décimas), diezmilésimas, y así sucesivamente. Los símbolos binarios se construyen a base de mitades, mitades de mitades, mitades de mitades de mitades, y así sucesivamente. Esto nos permite construír la siguiente tabla de equivalencias:



y así sucesivamente. Otras fracciones pueden ser representadas como combinaciones de estos números clave que aparecen en la tabla de equivalencias. Así:

.11 = 1/2 + 1/2 = 3/4

.101 = 1/2 + 1/3 = 5/3

Estos resultados los podemos corroborar de la siguiente manera, representando la fracción como el cociente de dos enteros binarios:

.11 = 11/100 = 3/4

.101 = 101/100 = 5/3

Además del sistema de numeración binaria, del sistema BCD, y del sistema hexadecimal, existen otros sistemas numéricos, entre los cuales tiene cierta prominencia el sistema octal o sistema base-8. Para fines comparativos, a continuación se dá un listado de los primeros diez números en su equivalente decimal, su equivalente octal, y su equivalente binario:



El papel que desempeña el sistema octal en el desarrollo de sistemas digitales basados en circuitos binarios tiene que ver con la relación sencilla que existe entre los símbolos binarios y los símbolos octales. Para poder apreciar mejor esta relación, examínese los siguientes símbolos equivalentes para cantidades un poco mayores:



Para una mejor visualización, cada equivalente binario ha sido separado en grupos de tres dígitos (siguiendo un orden de derecha a izquierda), lo cual nos permite descubrir que cada grupo de tres dígitos se corresponde con el dígito octal equivalente en la misma posición. De este modo, un número binario como 10001001 puede ser separado en grupos de tres dígitos como 10 001 001, lo cual nos permite determinar de inmediato a su equivalente octal como 211. El número binario 10001001 equivale al número decimal 137, y podemos verificar que el número octal 211 también equivale a este número decimal por la táctica usual de asignarle a cada dígito octal su valor posicional en el sistema decimal:

2118 = 2(82) + 1(81) + 1(80)

2118 = 2(64) + 1(8) + 1(1)

2118 = 128 + 8 + 1 = 13710

El propósito de la numeración octal (al igual que la numeración hexadecimal) es tender un puente entre el sistema de numeración decimal que nos es tan familiar y el menos entendible sistema binario. Los símbolos decimales constituyen nuestro medio cotidiano de trabajo para cálculos aritméticos, pero el lenguaje de "unos" y "ceros" es el lenguaje natural con el cual trabajan las máquinas. La desventaja de los números binarios es que se requiere una serie larga de "unos" y "ceros" para poder representar una cantidad que en el sistema decimal se puede representar de manera más compacta, como el número 10001001 que equivale al número decimal 137. La ventaja de utilizar símbolos octales es que son abreviaturas convenientes de símbolos binarios, y el utilizar números octales en lugar de los más familiares números decimales representa un paso natural para acortar la distancia que separa a una computadora "humana" acostumbrada a trabajar en el sistema decimal y la máquina.