TICO. Dpto. Tecnología IES Palas Atenea. Sistemas de numeración y codificación SISTEMAS DE NUMERACIÓN Y CODIFICACIÓN EL LENGUAJE DEL ORDENADOR Todos los elementos electrónicos del ordenador son digitales, es decir, trabajan con dos estados posibles: - El estado de activación supone la existencia de un voltaje eléctrico; a este nivel de funcionamiento se le asigna el dígito 1. - El estado de desactivación significa la ausencia de voltaje eléctrico; a este nivel de funcionamiento se le asigna el dígito 0. Como el ordenador utiliza la energía eléctrica para generar impulsos eléctricos que activan o desactivan los circuitos electrónicos, la informática ha tomado los conceptos del lenguaje binario para crear el lenguaje informático conocido como CÓDIGO o LENGUAJE MÁQUINA. Cada uno de los dígitos representativos del sistema binario (0 y 1) recibe el nombre de BIT (Binary Digit) y constituye la unidad mínima de información. Pero antes de estudiar el código binario de los ordenadores, es necesario estudiar los sistemas de numeración. Un sistema de numeración es el conjunto de símbolos y reglas que permiten representar datos numéricos. Estas representaciones se basan en sistemas de posicionamiento, en los que el valor de cada cifra dentro de un número depende de la cifra en sí y del lugar que ocupa en el número. SISTEMA DE NUMERACIÓN DECIMAL Es el sistema que utilizamos habitualmente. Se compone de diez símbolos o dígitos (0, 1, 2, 3,........., 9) a los que se le otorga un valor dependiendo de la posición que ocupe (unidades, decenas, centenas, ... etc). Por lo tanto es un sistema en base 10, ya que existen diez símbolos distintos que podemos emplear. El valor de cada dígito está asociado al de una potencia de base 10, y de exponente igual a la posición que ocupa el dígito (contado desde la derecha) menos uno. En este sistema el número 528, por ejemplo, se calcula como: 5·102 + 2·101 + 8·100 = 500 + 20 + 8 = 528 En el caso de números con parte decimal, la representación es análoga, usando potencias negativas. Representemos por ejemplo el número 8245,97: 8·103 + 2·102 + 4·101 + 5·100 + 9·10-1 + 7·10-2 = 8000+200+40+5+0.9+0.07 = 8245,97 SISTEMA DE NUMERACIÓN BINARIO Este sistema utiliza sólo dos símbolos que son el 0 y el 1, por lo tanto es un sistema en base dos. Los números se van formando igual que en decimal, solo que en lugar de 10 símbolos sólo disponemos de 2. Primero usamos todos los símbolos individualmente. En este caso, 0, 1. Como ya los hemos agotado, los vamos combinando de 2 en dos, obteniendo 10, 11. Como ya no existen más combinaciones, pasamos a agruparlos de 3 en 3: 100, 101, 110, 111. Luego los agruparíamos de 4 en 4 (del 1000 al 1111) y así sucesivamente. Conversión de un número binario al sistema decimal. Para calcular el valor equivalente en decimal de un número binario, se procede de la misma forma que en decimal, multiplicando cada cifra por una potencia de la base (en este caso 2) elevado a un exponente que depende de la posición del dígito en cuestión. Por ejemplo, calculemos el valor decimal del 1011(2) 1·23 + 0·22 + 1·21 + 1·20 = 8 + 0 + 2 + 1 = 11(10) 1 1 Dado que la única potencia impar de 2 es 20, es fácil averiguar, antes de realizar el cálculo correspondiente, si un 1 TICO. Dpto. Tecnología IES Palas Atenea. Sistemas de numeración y codificación Si el número tiene parte decimal, usaremos potencias negativas. Por ejemplo, calculemos el valor decimal del 10010,01(2) 1·24 + 1·21 + 1·2-2 = 16 + 2 + 0,25 = 18,25(10) Conversión de un número decimal al sistema binario. Parte entera: Para calcular la parte entera, tendremos que ir dividendo el número decimal por dos, hasta encontrar un cociente de valor 1. Este cociente será la primera cifra del número binaria. Las demás las obtendremos de los restos de las divisiones, empezando por el último y acabando con el primero. Como ejemplo, calculemos el valor binario del número 159 2 Cociente Resto 159:2 79 1 79:2 39 1 39:2 19 1 19:2 9 1 9:2 4 1 4:2 2 0 2:2 1 0 Si tomamos el último cociente y los restos leídos de abajo hacia arriba obtenemos: 159(10) = 10011111(2) Parte decimal En este caso, procedemos a la inversa; en vez de dividir, multiplicamos por dos. Reservamos la parte entera del número obtenido, y multiplicamos la parte decimal obtenida por dos, repitiendo el proceso hasta que tengamos una parte decimal nula. El resultado lo obtendremos leyendo las partes enteras de arriba hacia abajo (ojo, que es al contrario de lo que hacemos en la parte entera) Calculemos el valor binario de 0,625 P. Entera P. decimal 0,625 · 2 1 0,25 0,25 · 2 0 0,5 0,5 · 2 1 0 Si leemos las partes enteras de arriba hacia abajo obtenemos: 0,625(10) = 0,101(2) CODIFICACIÓN BINARIA Como se ha mencionado antes, la razón por la que los ordenadores usan el sistema binario se número binario es par o impar. Si acaba en 0, la potencia 2 0 no contribuye a la suma, por lo que el resultado será par. Si acaba en 1, obtendremos una suma en la que sólo habrá un sumando impar. El número resultante deberá ser impar. 2 Que sabemos deberá acabar en 1, al ser impar. 2 TICO. Dpto. Tecnología IES Palas Atenea. Sistemas de numeración y codificación debe al hecho de que es muy sencillo hacer corresponder un 1 a la presencia de voltaje y un 0 a su ausencia. Sin embargo, esto, por si solo, no es suficiente para poder establecer un sistema de comunicación satisfactorio con la máquina. Necesitamos establecer un código de tal forma que a cada cifra en decimal de 0 a 9 se le asigne un conjunto de unos y ceros predeterminado y fijo, de tal forma que sea el mismo para todas las máquinas. Hasta ahora hemos visto que, pasando de decimal a binario no nos hemos preocupado del número de cifras que necesitábamos. Así, el 2 en decimal es 10 en binario, con dos cifras, el 5 es el 101, con tres, y el 8 1000, con cuatro. Si en vez de pasar el número dos a binario queremos codificarlo, no sólo es necesario hacer el cambio de base, sino que además necesitamos decidir cuántas cifras (cuántos bits) vamos a usar para representarlo. Código BCD natural Los códigos BCD (digital codificado en binario) son los más usados, y dentro de ellos el más sencillo es el BCD natural. En él, cada cifra de 0 a 9 se representa en base dos, completando con ceros a la izquierda si es necesario. El número de bits usado para representar las cifras vendrá dado por el número de bits necesario para pasar a base 2 la cifra mayor. Aquí, 9 (10)=1001(2). Por tanto, los códigos BCD usarán 4 bits. En el caso particular del código BCD natural, la codificación se muestra en la siguiente tabla: Nº BCD NATURAL 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 - 1010 - 1011 - 1100 - 1101 - 1110 - 1111 Como hemos necesitado 4 bits para codificar el 8 y el 9, obtenemos 2 4 = 16 posibles 3 TICO. Dpto. Tecnología IES Palas Atenea. Sistemas de numeración y codificación combinaciones, de las cuales usamos diez3. Antes de continuar, debemos prestar atención a dos diferencias entre la codificación de un número en BCD y su expresión en base 2: 1. Si el número decimal es de una única cifra, la cantidad de cifras que usaremos en base dos será la mínima que necesitemos, mientras que en BCD debemos usar obligatoriamente 4 bits. Así, el 2 se expresa como 10 en base 2, pero su codificación será 0010. 2. Para codificar números decimales de más de una cifra, sustituiremos cada una de ellas por su correspondiente codificación, usando 4 bits para cada cifra. En el ejemplo que hemos hecho anteriormente, el 159 se expresaba en base 2 como 10011111. Sin embargo, codificado en BCD natural sería 000101011001. Otros códigos BCD Dado que la codificación BCD consiste en asignar una secuencia de 4 bits a cada una de las 10 cifras de 0 a 9, no existe ninguna obligación de hacer corresponder esas secuencias con la equivalencia entre el número decimal y su valor en base 2, como se hace para formar el BCD natural. Así, podemos generar una cantidad enorme de códigos. Entre los más usados aparte del natural podemos destacar tres: 1. Código Aiken. Se asignan las 5 primeras combinaciones a los números de 0 a 5 y las cinco últimas a los números de 6 a 9. Las 6 intermedias no se asignan. 2. BCD exceso 3. En este caso, las tres primeras y las tres últimas combinaciones no se asignan, y se usan las 10 intermedias. 3. Códigos Gray. Entre un número y el siguiente, sólo se cambia el valor de un bit. Se usan mucho en sistemas de detección de errores. Nº BCD natural Código Aiken BCD exceso 3 Código Gray 0 0000 0000 0011 0000 1 0001 0001 0100 0001 2 0010 0010 0101 0011 3 0011 0011 0110 0010 4 0100 0100 0111 0110 5 0101 1011 1000 0111 6 0110 1100 1001 0101 7 0111 1101 1010 0100 8 1000 1110 1011 1100 9 1001 1111 1100 1101 Volviendo al ejemplo del 159, podemos ver cómo se expresaría en binarios que hemos visto: los diferentes sistemas Decimal Base 2 BCD natural Código Aiken Exceso 3 Código Gray 159 10011111 000101011001 000110111111 010010001100 000101111101 3 Como regla general, con n bits tendremos 2n combinaciones posibles. 4 TICO. Dpto. Tecnología IES Palas Atenea. Sistemas de numeración y codificación SISTEMA DE NUMERACIÓN HEXADECIMAL. Como se acaba de ver, para codificar los números 8 y 9 en binario se necesitan 4 bits, lo que da lugar a 16 combinaciones de unos y ceros, de las cuales dejamos 6 sin utilizar. En informática resulta muy interesante no desaprovechar esas combinaciones, y usar un sistema de numeración hexadecimal, que usa una base 16. Al igual que en decimal formamos todos los números a partir de 10 cifras básicas (de 0 a 9) y en binario a partir de dos (0 y 1), en hexadecimal necesitaremos una base de 16 cifras: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F. Cuando agotamos estas 16 cifras, las agruparemos de 2 en 2. Así, después de F vendrán los números 10, 11, 12, …, 19, 1A, 1B, …, 1F, 20, 21, …, 29, 2A, …, 99, 9A, …, 9F, A0, …, FF. Luego los agruparemos de 3 en 3, desde el 100 hasta el FFF, y así sucesivamente. La tabla de correspondencias entre números binarios, hexadecimales y BCD natural será entonces: Decimal Hexadecimal BCD Natural 0 0 0000 1 1 0001 2 2 0010 3 3 0011 4 4 0100 5 5 0101 6 6 0110 7 7 0111 8 8 1000 9 9 1001 - A (10) 1010 - B (11) 1011 - C (12) 1100 - D (13) 1101 - E (14) 1110 - F (15) 1111 Conversión de un número hexadecimal a decimal. Se procede exactamente igual que en el caso de un número binario, multiplicado cada cifra por una potencia de la base (16, en este caso) elevada a un exponente que depende de la posición de la cifra. Si queremos pasar el 2B8E(16) a decimal: 2B8E = 14 · 160 + 8 · 161 + 11 · 162 + 2 · 163 = 14 + 128 + 2816 + 8192 = 11150(10) Conversión de un número decimal a hexadecimal. También se procede como en el caso de decimal a binario: tendremos que ir dividendo el 5 TICO. Dpto. Tecnología IES Palas Atenea. Sistemas de numeración y codificación número decimal por 16, hasta encontrar un cociente menor que este número. Este cociente será la primera cifra del número hexadecimal. El resto las obtendremos de los restos de las divisiones, empezando por el último y acabando con el primero, teniendo en cuenta que para restos mayores de 9 habrá que usar una letra entre A y F. Por ejemplo, pasemos el 42198(10) a hexadecimal. Cociente Resto 42198:16 2637 6 2637:16 164 D (13) 164:16 A (10) 4 Tomando el último cociente y los restos de abajo hacia arriba obtenemos: 42198(10) = A4D6(16) Conversión de un número hexadecimal a binario. Es extraordinariamente sencillo, ya que se trata de sustituir cada cifra del número hexadecimal por su correspondiente codificación en BCD natural: C70(16) = 110001110000(2) Conversión de un número binario a hexadecimal. Dividimos el número binario en grupos de 4, de derecha a izquierda (completando con ceros a la izquierda si es necesario) y se sustituye cada grupo por su valor hexadecimal: 10101011000101(2) = 0010 1010 1100 0101 = 2AC5(16) CÓDIGO o LENGUAJE MÁQUINA. Cada uno de los dígitos representativos del sistema binario (0 y 1) recibe el nombre de BIT (Binary Digit) y constituye la unidad mínima de información. Un grupo de 8 bits se denomina BYTE, y a partir de ahí se obtienen los diversos múltiplos: 8 bits = 1 byte 1024 bytes = 1 Kilobyte 1024 kilobytes = 1 Megabyte 1024 Megabytes = 1 Gigabyte 1024 Gigabytes = 1 Terabyte El motivo por el que la proporción entre los distintos múltiplos es 1024 se debe a que ésta es la cantidad en potencias de base 2 que más se aproxima a la proporción 1000 (2 10 = 1024). El ordenador necesita recibir los datos codificado en forma binaria, es decir, convertidos en ceros y unos. Por tanto, todos los caracteres (letras, números, símbolos) deben ser “traducidos” al lenguaje binario mediante un cierto código. Existen varios tipos de códigos que cumplen esta función entre los que destaca el código ASCII (American Standard Code for Information Interchange). En el código ASCII a cada carácter se le asigna un byte. Como cada byte está formado por 8 bits, tendremos 28 = 256 caracteres diferentes. La tabla completa del código se muestra en la siguiente página. Cada carácter tiene asignado un número entre 0 y 255, además de su equivalente hexadecimal. De esta forma, es sencillo escribir el código ASCII de cualquier texto, ya que sólo es necesario buscar el código hexadecimal de cada símbolo y escribir su equivalente BCD, respetando que cada carácter siempre se codifica a 8 bits. Por ejemplo, escribamos Informática. en código ASCII 6 TICO. Dpto. Tecnología IES Palas Atenea. Sistemas de numeración y codificación Letra (hex) ASCII Letra (hex) ASCII Letra (hex) ASCII Letra (hex) ASCII I (49) 01001011 o (6F) 01101111 á (A0) 10100000 c (63) 01100011 n (6E) 01101110 r (72) 01110010 t (74) 01110100 a (61) 01100001 f (66) 01100110 m (6D) 01101101 i (69) 01101001 . (2E) 00101110 Si lo escribimos seguido, Informática. en ASCII quedaría: 010010110110111001100110011011110111001001101101101000000111010001101001011 000110110000100101110 Que es en realidad lo que procesa un ordenador al escribir la palabra en el teclado. Hay que notar que para el ordenador no son iguales las mayúsculas y las minúsculas. Por tanto, el código para I no es igual que el de i. Lo mismo ocurre para las vocales sin acentuar y acentuadas. Si el texto tuviese espacios en blanco, también habría que introducir su carácter ASCII correspondiente. 7