Estructura de computadores Tema 2: Sistemas de representación numérica Tema 2: Sistemas de representación numérica 2.1 Sistemas de Numeración Definiciones previas Comenzaremos por definir unos conceptos fundamentales. Existen 2 tipos de computadoras: • Analógicas: actúan bajo el control de variables continuas, es decir, que toman infinitos valores. • Digitales: actúan bajo el control de variables discretas, es decir, que pueden tomar un número finito de valores en el tiempo. Las computadoras con las que vamos a tratar son digitales. Sistema de numeración: es un conjunto de reglas, signos y convenios que nos permiten expresar, verbal y gráficamente, las cantidades de las magnitudes o valores numéricos. Base de un sistema de numeración: es el número de signos distintos que se emplean en el sistema. Alfabeto de un sistema de numeración: son todos y cada uno de los signos que se emplean en el sistema. A partir de ellos se expresarán todas las cantidades. Por ejemplo, el sistema de numeración decimal utiliza diez dígitos: Base: 10 Alfabeto: 0,1,2,3,4,5,6,7,8,9. 1 Estructura de computadores Tema 2: Sistemas de representación numérica Clasificación Los sistemas de numeración se clasifican en: posicionales y no posicionales. 1. Sistemas posicionales En ellos, cada cifra de un valor numérico contribuye al valor final dependiendo de su valor y de la posición que ocupa dentro de él (valor relativo). En estos sistemas tenemos tantos símbolos como la base del sistema. Los números mayores que la base se representan por medio de varias cifras. El valor final será la suma de una serie de potencias de la base del sistema (B): N = An·Bn + A n-1·Bn-1 + ... + A 1·B1 + A 0·B0 Donde A i son las distintas cifras del valor numérico e ‘i’ su posición. 2. Sistemas no posicionales Al contrario que en el caso anterior, en este caso la contribución de cada cifra no depende del lugar que ocupa. Un ejemplo de este sistema serían los números romanos: La combinación XXI equivale a 21. Podemos ver cómo la cifra X aparece dos veces y siempre tiene el mismo valor: 10 unidades, independientemente de su posición. El inconveniente que tienen estos sistemas es que para escribir valores numéricos grandes son necesarios muchos símbolos, y además resulta difícil efectuar operaciones aritméticas con ellos, cosa que no sucede con los posicionales. Los sistemas de numeración que veremos a continuación son todos sistemas posicionales. A partir de ahora, para evitar confusiones, cuando expresemos un valor numérico pondremos un subíndice al final indicando la base en la que se expresa dicho valor, salvo que por el contexto quede suficientemente claro: 22510 110112 = = Base decimal Base binaria 2 Estructura de computadores Tema 2: Sistemas de representación numérica Sistema decimal Es el sistema que utilizamos habitualmente las personas. Base: Alfabeto: 10 0,1,2,3,4,5,6,7,8,9 Cumple la fórmula anterior (B=10): N = An·10n + An-1·10n-1 + ... + A 1·101 + A 0·100 Ejemplo: 22510 = 2·102 + 2·101 + 5·100 = 200 + 20 + 5 3 Estructura de computadores Tema 2: Sistemas de representación numérica Sistema binario Es el sistema utilizado por los computadores. Base: Alfabeto: 2 0,1 Este sistema, presenta el inconveniente de que necesita muchas cifras para la representación de un número grande, y es muy engorroso para un humano. Sin embargo, el sistema binario es el más adecuado a las máquinas electrónicas por varias razones: 1. La mayor parte de las computadoras existentes representan la información y la procesan mediante elementos y circuitos electrónicos de dos estados (relés, núcleos de ferrita, etc.). 2. Por la seguridad y la rapidez de respuesta de los elementos físicos de dos estados diferenciados (ON / OFF). 3. Las operaciones aritméticas son sencillas. Los quince primeros números binarios se escriben: Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 4 Estructura de computadores Tema 2: Sistemas de representación numérica Conversión binario-decimal La forma más sencilla de realizar esta conversión es desarrollando la fórmula que vimos para los sistemas posicionales (suma de potencias de la base). N = An·Bn + A n-1·Bn-1 + ... + A 1·B1 + A 0·B0 Donde A i son las distintas cifras del valor numérico e ‘i’ su posición. B=2 Ejemplo 1: Dado el número binario: “10112”, encontrar el equivalente decimal. Si desarrollamos el número dado como potencias de 2 tendremos: 10112 = 1·2 3 + 0·2 2 + 1·2 1 + 1·2 0 = 1·8 + 0·4 + 1·2 + 1·1 = = 8 + 2 + 1 = 1110 Ejemplo 2: Ahora vamos a realizar lo mismo pero con cifras decimales. Dado el número binario: “1011,0112”, encontrar el equivalente decimal. 1011,0112 = 1·2 3 + 0·2 2 + 1·2 1 + 1·2 0 + 0·2 -1 + 1·2 -2 + 1·2 -3 = = 1·8 + 0·4 + 1·2 + 1·1 + 0·1/2 + 1·¼ + 1·1/8 = 11,375 Conversión decimal-binario Una forma de realizar esta conversión sería separar la parte entera de la parte fraccionaria, y operar del siguiente modo: 1. La parte entera se divide tantas veces como sea posible por la base (2), hasta que el cociente sea 0 o 1. El último cociente y los restos obtenidos, al escribirlos en orden inverso a su obtención, nos dan el resultado. 2. La parte fraccionaria se multiplica por la base (2); la parte entera obtenida (0..1) representa la cifra binaria. Se procede de forma iterativa con la parte fraccionaria que nos vaya quedando, hasta que sea 0 o veamos que el resultado será periódico o infinitas cifras decimales. El resultado será la unión de las partes enteras, en el orden que las hemos obtenido. 5 Estructura de computadores Tema 2: Sistemas de representación numérica Ejemplo 1: Vamos a obtener el equivalente binario del valor decimal: 1110 En este caso tan sólo tenemos parte entera. 11 |__2__ 1 5 |__2__ 1 2 |__2__ 0 1 Según esto, el equivalente será: 1110 = 10112 Puede comprobarse el resultado con los ejemplos anteriores. Ejemplo 2: Expresar el número decimal 109,62510 en el sistema binario. Parte entera 109 |__2__ Obtenemos el valor 11011012 1 54 |__2__ 0 27 |__2__ 1 13 |__2__ 1 6 |__2__ 0 3 |__2__ 1 1 Parte fraccionaria 0,625 * 2 = 1,250 0,250 * 2 = 0,5 0,5 * 2 = 1,0 Obtenemos el valor: 1012 El resultado final es la unión de ambos valores: 109,62510 = 1101101,1012 6 Estructura de computadores Tema 2: Sistemas de representación numérica Sistema Octal Base: Alfabeto: 8 0,1,2,3,4,5,6,7 El interés de este sistema proviene de que su conversión al binario resulta sencilla, por ser 8 = 2 3. Se usa bastante con listados de programas y volcados de memoria (dump), pues permite impresiones mucho más compactas que con el sistema binario, ya que cada dígito octal equivale a 3 dígitos binarios. Los ocho primeros números octales se escriben: Octal 0 1 2 3 4 5 6 7 Decimal 0 1 2 3 4 5 6 7 Binario 000 001 010 011 100 101 110 111 Conversión octal-binaria Para convertir un número expresado en base 8 a base 2, simplemente sustituimos cada una de las cifras que lo forman por sus tres cifras binarias equivalentes. Ejemplo: 375,4210 = 011 111 101,100 010 Conversión binaria-octal Se realiza a la inversa, comenzando desde la coma decimal hacia la izquierda para la parte entera, rellenando con 0’s a la izquierda si fuera necesario; y desde la coma decimal hacia la derecha para la parte fraccionaria, rellenando con 0’s a la derecha si fuera necesario. Ejemplo 1: 11111101,1000102 = 011 111 101,100 0102 = 375,4210 Ejemplo 2: 11010,10112 = 011 010,101 1002 = 32,5410 7 Estructura de computadores Tema 2: Sistemas de representación numérica Conversión octal-decimal Se realiza del mismo modo que de binario a decimal, teniendo en cuenta que la base ahora es B=8. Ejemplo: 345,5 8 = 3·8 2 + 4·8 1 + 5·8 0 + 5·8 -1= 192 + 32 + 5 + 0,625 = 229,62510 Conversión decimal-octal Se realiza del mismo modo que de decimal a binario, dividiendo la parte entera de forma sucesiva por la base B=8, y multiplicando la parte fraccionaria por la base. Ejemplo: Expresar el número decimal 1036,3510 en octal. Parte entera 1036 |__8__ El resultado será: 103610 = 20148 23 129 |__8__ 76 49 16 |__8__ 4 1 0 2 Parte fraccionaria 0,35 * 8 = 2,8 0,8 * 8 = 6,4 0,4 * 8 = 3,2 0,2 * 8 = 1,6 0,6 * 8 = 4,8 Obtenemos el valor: 26314...8 El resultado final es la unión de ambos valores: 1036,3510 = 2014,26314...8 8 Estructura de computadores Tema 2: Sistemas de representación numérica Sistema Hexadecimal Base: Alfabeto: 16 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F El interés de este sistema proviene de que su conversión al binario resulta sencilla, por ser 16 = 24. Esto significa que cada grupo de 4 bits (dígitos en binario), equivale a uno solo en hexadecimal, con lo cual, obtendremos representaciones mucho más compactas. Conversión hexadecimal-binario Basta con sustituir cada símbolo hexadecimal por su equivalente en binario, según se indica en la tabla siguiente: Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Ejemplo: Hállese el equivalente binario del número 9A7E16 9A7E16 = 1001 1010 0110 11102 Conversión binario-hexadecimal La conversión de un número binario a hexadecimal se realiza a la inversa: se forman grupos de cuatro cifras binarias a partir de la coma decimal, hacia la izquierda y hacia la derecha, y se sustituye cada grupo por su equivalente hexadecimal. Si el grupo final de la izquierda queda incompleto, se rellena con 0’s por la izquierda. Del mismo modo, si el grupo final de la derecha queda incompleto, se rellena con 0’s por la derecha. 9 Estructura de computadores Tema 2: Sistemas de representación numérica Ejemplo: Calcúlese el equivalente hexadecimal del número binario siguiente: 1101010111100011100000001,1100012 Agrupamos y rellenamos con 0’s: 0001 1010 1011 1100 0111 0000 0001,1100 01002 Sustituimos cada grupo de 4 por su equivalente hexadecimal: 1 A B C 7 0 1 , C 4 Resultado: 1ABC701,C416 Conversión hexadecimal-decimal La conversión se realiza siguiendo el mismo procedimiento que en las conversiones binario-decimal, pero considerando la base B=16. En este caso, además, deberemos sustituir los valores A..F por su equivalencia en el sistema decimal. Ejemplo: Hállese el equivalente decimal del valor hexadecimal 39,B816. 39,B816 = 3·161 + 9·160 + B·16-1 + 8·16-2 = = 3·161 + 9·160 + 11·16-1 + 8·16-2 = = 48 + 9 + 0.6875 + 0.03125 = = 57,71875 Conversión decimal-hexadecimal Procederemos del mismo modo que en la conversión decimal-binario, considerando B=16. Dividiremos la parte entera sucesivamente por la base, y la parte fraccionaria la multiplicaremos por la base. Ejemplo: Hállese el equivalente hexadecimal del número 4573,7910. Parte entera 4573 |_16__ 13 285 |_16__ 13 17 |_16__ 1 1 457310 = 11DD16 10 Estructura de computadores Tema 2: Sistemas de representación numérica Parte fraccionaria 0,79 * 16 = 12,64 0,64 * 16 = 10,24 0,24 * 16 = 3,84 0,84 * 16 = 13,44 0,44 * 16 = 7,04 ... Valor final: Valor: 12 10 3 13 7... = CA3D7...16 4573,CA3D7...16 Conversiones de cualquier base Conversión de una base cualquiera a base decimal (b => 10) Para este tipo de conversión utilizaremos la fórmula de la suma de productos de potencias de la base vista anteriormente. Ejemplo: Hallar el equivalente decimal del valor 1312,3 4 1312,3 4 = 1·4 3 + 3·4 2 + 1·4 1 + 2·4 0 + 3·4 -1 = = 64 + 48 + 4 + 2 + 0.75 = 118,7510 Conversión de base decimal a otra base cualquiera (10 => b) Se realiza como hemos visto hasta ahora, es decir: • Parte entera: dividiendo el número decimal por la base a la que queremos convertir, de forma sucesiva hasta que el cociente sea menor que la base. El último cociente y los restos que resultan de todas las divisiones en orden inverso a su obtención es el resultado final. • Parte fraccionaria: multiplicando sucesivamente por la base, cogiendo las partes enteras como parte del resultado. 11 Estructura de computadores Tema 2: Sistemas de representación numérica Ejemplo: Expresar el número decimal 545,6710 en base 5 Parte entera 545 |__5__ 0 109 |__5__ 4 21 |_ 5__ 1 4 54510 = 41405 Parte fraccionaria 0,67 * 5 = 3,35 0,35 * 5 = 1,75 0,75 * 5 = 3,75 0,75 * 5 = 3,75 ... Valor final: Valor: 3 1 3 3 ... = 3133...5 4140,3133...5 Conversión de una base b 1 a otra b 2 Para realizar este tipo de conversiones desde una base que no sea la decimal a otra que tampoco lo sea seguimos dos pasos: • Convertir el valor en base b1 a base decimal • Convertir de base decimal a b2 Estas conversiones las haremos según los apartados anteriores. Valor en b1 ⇒ Valor intermedio en base 10 ⇒ Valor final en b2 Ejemplo: Expresar el valor 13189 en base 7. • Convertimos a decimal (base 10): 13189 = 1·9 3 + 3·9 2 + 1·9 1 + 8·9 0 = 729 + 243 + 9 + 8 = 98910 • Convertimos a base 7: 989 |__7__ 2 141 |__7__ 1 20 |__7__ 6 2 98910 = 26127 12 Estructura de computadores Tema 2: Sistemas de representación numérica Conversiones de base con números no enteros: Cuando trabajamos con números no enteros tenemos parte entera y parte fraccionaria. Hemos visto que para convertir de decimal a cualquier otra base tenemos que realizar dos procesos cuando tenemos cifras decimales; la parte entera y la parte fraccionaria. La parte entera es sencilla, como hemos visto hasta ahora. Para la parte fraccionaria debemos tener en cuenta las siguientes consideraciones. Dependiendo del tipo de número que tengamos podemos tener las siguientes posibilidades. 1 Racionales 1.1 Cifras decimales no periódicas Procedemos como hemos visto hasta ahora, es decir, multiplicando sucesivamente por la base y nos quedamos con la parte entera. 0,615 x 2 = 1,250 0,250 x 2 = 0,500 0,500 x 2 = 1 Por tanto: 0,62510 = 0,1012 NOTA: el hecho de que un número N tenga un número finito de decimales en una base no implica que en otra base sea así (p.e. 0,82510) 1.2 Cifras decimales periódicas Tenemos que expresarlo en forma de fracción equivalente irreducible, después la expresaremos en binario (base 2) (numerador y denominador) y haremos la división en binario. _ 0,666... = 0,6 (periódico) • Fracción irreducible: _ x = 0,6 _ 1 · x = 0,6 _ 10 · x = 6,6 _ _ 10·x - 1·x = 6,6 - 0,6 = 6 (Lo llamamos x) (La parte periódica detrás de la coma: ya está) (Desplazando el número de cifras periódicas) (Restando ambas expresiones) 13 Estructura de computadores Tema 2: Sistemas de representación numérica x=6/9=2/3 (Fracción equivalente e irreducible) _ Se puede comprobar que: 2 / 3 = 0,6 • Expresarlo en binario: • Finalmente, hacer la división binaria: 102 / 112 10 0 |__11__ - 11 0, 100100 ... -----0 0100 102 / 112 = 0,100 100 ... Otros ejemplos: __ x = 0,07954 (Lo llamamos x) __ 1000 · x = 79,54 (La parte periódica detrás de la coma) __ 1000 00 · x = 7954,54 (Desplazando el número de cifras periódicas) __ __ 1000 00·x - 1000·x = 7954,54 - 79,54 = 7875 (Restando ambas expresiones) x = 7875 / 99000 = 7 / 88 (Fracción equivalente e irreducible) __ Se puede comprobar que: 7 / 88 = 0,07954 __ x = 0,563 (Lo llamamos x) __ 10·x = 5,63 (La parte periódica detrás de la coma) __ 1000·x = 563’63 (Restando ambas expresiones) __ __ 1000·x - 10·x = 563,63 - 5,63 = 558 (Restando ambas expresiones) x = 558 / 990 = 279 / 495 (Fracción equivalente e irreducible) __ Se puede comprobar que: 279 / 495 = 0,563 • En la práctica lo que se hace para obtener la fracción equivalente es tomar el número como un entero, le restamos la parte no periódica y se divide por tantos 9’s como el número de cifras periódicas y tantos 0’s como las no periódicas. 14 Estructura de computadores 2 Tema 2: Sistemas de representación numérica Irracionales Tienen infinitas cifras decimales que no se repiten. Los tratamos como racionales, pero tenemos que considerar que trabajamos con errores, es decir, los resultados serán aproximados. El proceso es similar a los racionales no periódicos, solo que en este caso, necesitamos conocer el número de cifras decimales con las que nos vamos a quedar. Supongamos el número PI = 3,141592653 ... (infinitas cifras decimales) Vamos a considerar que el número PI = 3,1416 (redondeado a 4 cifras) Al hacer esto estamos cometiendo un error E1 ≤ 10-4 Al convertirlo al sistema binario cometemos otro error E2, tal que: E2 ≤ E1 Para determinar el número de cifras fraccionarias binarias necesarias para que se cumpla la desigualdad anterior hacemos lo siguiente: Sabemos que: Del mismo modo: Debe complirse: Sustituyendo: Tomamos logaritmos: E1 ≤ 10-4 E2 ≤ 2-n, donde n = número de cifras fraccionarias. E2 ≤ E1 2-n ≤ 10-4. Log10 2-n ≤ Log10-4 ⇒ -n·Log10 2 ≤ -4·Log10 10 ⇒ -n·Log10 2 ≤ -4 ⇒ -n ≤ (-4 / Log10 2) ⇒ n > (4 / Log10 2) ⇒ n > 13,28 Por tanto, necesitaremos al menos 14 cifras decimales en la parte fraccionaria para no cometer más error al convertir a binario. 0,1416 x 2 = 0,2832 0,2832 x 2 = 0,5664 0,5664 x 2 = 1,1328 0,1328 x 2 = 0,2656 0,2656 x 2 = 0,5312 0,5312 x 2 = 1,0624 0,0624 x 2 = 0,1248 Por tanto, el resultado será: 0,1248 x 2 = 0,2496 0,2496 x 2 = 0,4992 0,4992 x 2 = 0,9984 0,9984 x 2 = 1,9968 0,9968 x 2 = 1,9936 0,9936 x 2 = 1,9872 0,9872 x 2 = 1,9744 3,141610 = 11,001001000011112 (con un error E ≤ 10-4). 15 Estructura de computadores Tema 2: Sistemas de representación numérica 2.2 Aritmética binaria La aritmética binaria es básica en las computadoras digitales Las operaciones aritméticas que vamos a ver son las mismas que para el sistema decimal: • suma • resta • multiplicación • división, para la base binaria Suma La tabla de adición siguiente nos muestra las 4 reglas básicas para sumar dígitos binarios: Valor 1 0 0 1 1 Valor 2 0 1 0 1 Suma 0 1 1 0 Acarreo 0 0 0 1 En el último caso tenemos un acarreo, que se sumará en la cifra siguiente. Entonces tendremos que sumar 3 bits, los dos de las dos cifras binarias que estamos sumando y el bit de acarreo. Si ambos son 1, al sumarle el acarreo, obtendremos 1 y volveremos a tener un acarreo. Ejemplo: Sumar los valores binarios 110011101 y 10110111. 110011101 + 10110111 --------------------------10 01010100 16 Estructura de computadores Tema 2: Sistemas de representación numérica Resta La sustracción binaria utiliza las siguientes reglas: Valor 1 0 0 1 1 Valor 2 0 1 0 1 Resta 0 1 1 0 Acarreo 0 -1 0 0 En el segundo caso, lo que haremos será prestar un 1 de la siguiente columna, o la primera que no sea 0, sustituyendo todos los 0 por 1 desde esa columna hasta la columna actual (todo esto es en el minuendo). Ejemplo: Efectuar la diferencia 11101 – 1011. modificaciones en el minuendo: 0 11101 - 1011 -----------------10010 minuendo: substraendo: 29 - 11 ------18 Ejemplo: Efectuar la diferencia 11000 – 10011. modificaciones en el minuendo: 0 1 1 11000 - 10011 ------------------00101 minuendo: substraendo: 24 - 19 ---------5 En el caso de que tengamos cifras decimales, lo primero que debemos hacer es alinear verticalmente las comas binarias antes de efectuar la resta y rellenar con ceros a la derecha de los números para ajustar las partes fraccionarias a un mismo número de dígitos. Ejemplo: Efectuar la diferencia 1101,101 – 11,10111. modificaciones en el minuendo: 0 1 0 minuendo: substraendo: - 0 1 0 1 1101,10100 11,10111 ----------------------------1 0 0 1 , 1 11 01 17 Estructura de computadores Tema 2: Sistemas de representación numérica También podría hacerse como hacemos en el sistema decimal, sumando los acarreos negativos a la siguiente columna del sustraendo, es decir, en vez de realizar modificaciones en el minuendo, realizaremos modificaciones en el sustraendo. Cuando sumemos un acarreo, si en la siguiente columna tengamos un 1, se produce un nuevo acarreo y seguimos sumando dicho acarreo a la siguiente columna, hasta llegar a un bit 0. minuendo: substraendo: modificaciones en el sustraendo: - 1101,10100 11 ,10111 1 0 0 0 1 0 0 ----------------------------1 0 0 1 , 11 1 01 18 Estructura de computadores Tema 2: Sistemas de representación numérica Multiplicación La multiplicación de 2 bits sigue las siguientes 4 reglas: Valor 1 0 0 1 1 Valor 2 0 1 0 1 Multiplicación 0 0 0 1 La multiplicación de números binarios se realiza de la misma forma que con números decimales. Se realizan los productos parciales, desplazando cada producto parcial una posición a la izquierda, y luego se suman dichos productos. Es aun más sencilla que con números decimales, ya que en binario tan sólo tenemos dos dígitos: 0 y 1. Cuando multiplicamos por 0 obtenemos 0, y cuando multiplicamos por 1 obtenemos el mismo número. Ejemplo: Calcular el producto 1100 x 1011. 1100 x 1011 --------------1100 1100 0000 +1100 ---------------------10000100 12 x 11 -------132 En el caso de que tengamos cifras decimales, la multiplicación se realiza exactamente igual, y al final, el número de posiciones decimales en el número resultante del producto es la suma del número de cifras decimales de los números que se están multiplicando. Ejemplo: Calcular el producto binario 11,01 x 101,1. 11,01 x 101,1 -------------1101 1101 0000 1101 --------------------1 0 0 0 1,1 1 1 3,25 x 5,5 ------------1 6 25 1625 ------------1 7,8 7 5 19 Estructura de computadores Tema 2: Sistemas de representación numérica División El algoritmo utilizado por la división binaria se reduce a sustracciones repetidas del divisor. Las reglas utilizadas son las siguientes: Valor 1 0 0 1 1 Valor 2 0 1 0 1 División No definido 0 Imposible 1 Ejemplo: Efectuar la división 1 1 1 0 1 1 1 / 1 0 0 1 0 1 1 1 0 1 1 1 |_1 0 0 1_ -1001 1101 -----------01011 -1001 -----------0 0 1 011 -1001 -----------0010 1 1 9 |__9__ - 9 13 -----29 -27 ------2 En el caso de fracciones binarias se trata de la misma forma que la división de fracciones decimales, es decir, se convierte el divisor en un entero desplazando la coma binaria a la derecha; el dividendo se desplaza el mismo número de posiciones. Ejemplo: Realizar la división 111,00001 / 1,01 1 1 1 0 0 , 0 0 1 |__1 0 1___ -101 101101 --------011 01000 01000 - 101 - 101 -----------------------0110 011 -101 ---------00101 - 101 -----------000 7,03125 / 1,250 = 5,625 0 110 - 101 -----------001 20 Estructura de computadores Tema 2: Sistemas de representación numérica El resultado final será el cociente pero cogiendo tantas cifras decimales como tenga el dividendo, después de haber desplazado la coma. En este caso son 3. Por tanto, el resultado es: 101,101. NOTA: Los computadores utilizan una forma de representación de los números negativos llamada “complemento”, que nos facilita la realización de las operaciones de resta, ya que utiliza circuitos sumadores. La veremos en el siguiente apartado. 21 Estructura de computadores Tema 2: Sistemas de representación numérica 2.3 Representación computadoras de la información en las En las computadoras, la información se procesa por conmutación y almacenamiento de señales eléctricas. Se utiliza el sistema binario por la facilidad y estabilidad que tiene representar dos estados lógicos diferenciados. Dependiendo de las familias lógicas utilizadas, se utiliza un valor de tensión para representar el “0” lógico y otro valor para el “1” lógico. No se trata de un valor exacto, sino de un margen. • • • Familia TTL: Familia CMOS: Familia ECL (lóg.neg.): “0” = 0,2 v / “1” = 3,3 v “0” = 0..3 v / “1” = 7..10 v “0” = -0,75 v / “1” = -1,5 v Los dígitos binarios se suelen transmitir y recibir como una sucesión de impulsos. Existen dos técnicas para distinguir entre los dos estados lógicos: • Con retorno a cero (RZ): un impulso positivo representa un “1” y un impulso negativo representa un “0”. 1 1 1 0 • Sin retorno a cero (NRZ): el “0” se representa por ausencia de impulso, y el “1” se representa por un impulso. Lógicamente, los circuitos receptores deben mantenerse sincronizados con la señal. 1 1 0 1 22 Estructura de computadores Tema 2: Sistemas de representación numérica Números con signo Los sistemas digitales deben ser capaces de manejar números positivos y negativos. Un número binario con signo queda determinado por su magnitud (valor) y su signo (positivo/negativo). El símbolo “-“ del sistema decimal no se puede representar en binario. Debido a esto, existen 3 formatos de representación de números con signo: • • • Signo-magnitud: Complemento a la base Complemento a la base menos uno En todos ellos, el signo del número viene representado por un bit adicional, el “Bit de signo”, que se coloca en el extremo izquierdo del número binario con signo. Se utiliza el siguiente convenio: “0”: signo positivo “1”: signo negativo Método signo-magnitud Se trata de reservar el bit del extremo izquierdo (MSB) como bit de signo; los restantes representan el valor numérico del número en formato binario (magnitud). n bits Bs 1 bit Magnitud (n-1) bits Por ejemplo, para n=8: +1110 = 0 000 1011 - 1110 = 1 000 1011 En un registro de n bits, los números que pueden representarse serán 0 .. 2 -1. En total 2 n números. Al utilizar el primer bit como bit de signo, no se reduce la cantidad de números que se pueden representar (2n), pero si el valor mínimo y máximo, pues en vez de tener n bits para la magnitud ahora tendremos n-1 bits. Por tanto, el rango de valores que podremos representar en signo-magnitud es: n -(2n-1-1) .. 0 .. +(2n-1-1) Esta representación presenta ciertos inconvenientes: • • • Pues para cualquier operación aritmética debemos comprobar primero el signo, para después sumar o restar en función del mismo. El diseño de circuitos lógicos que realicen operaciones aritméticas con números binarios en signo-magnitud no es fácil. Tenemos dos representaciones para el número 0: +010 = 0 000 0000 -010 = 1 000 0000 23 Estructura de computadores Tema 2: Sistemas de representación numérica Método del complemento La utilización de números complementados es un concepto especialmente útil para simplificar la resta, pues permite realizarla utilizando circuitos sumadores. Los números positivos en este sistema se representan de la misma forma que los números positivos en formato signo-magnitud, simplemente se añade un 0 como bit de signo a la magnitud del número. El número 0 se identifica como positivo y tiene por tanto un bit de signo 0 y una magnitud de todos ceros. Los números negativos son el complemento del correspondiente número positivo. Existen dos variantes en la forma de complemento: el complemento a la base y el complemento a la base menos uno. NOTA: Cuando hay decimales, se quita la coma, se hace el complemento correspondiente y de nuevo se coloca la coma. Complemento a la base El complemento a la base de un número ‘a’ de n cifras es el valor: Cb = bn – |a| con b = base del sistema n = número de dígitos incluido el signo |a| = valor absoluto del número Para el sistema binario recibe el nombre de complemento a 2 o complemento verdadero: b=2 => C 2 = 2n – |a| Complemento a la base menos 1 El complemento a la base menos 1 de un número ‘a’ es el valor: Cb-1 = bn – 1 – |a| b = base del sistema n = número de dígitos incluido el signo |a| = valor absoluto del número Para el sistema binario recibe el nombre de complemento a 1 o complemento restringido: b=2 => C 1 = 2n – 1 – |a| 24 Estructura de computadores Tema 2: Sistemas de representación numérica Ejemplo: considerando la base decimal (b=10), obtener los complementos a la base (C 10) y a la base menos uno (C 9): a = 2310 Tenemos 2 dígitos (n = 2) C10: -2310 = 102 – |a| = 100 – 23 = 77C10 2 C9 : -2310 = 10 – 1 – |a| = 100 – 1 – 23 = 76C9 a = 125810 Tenemos 4 dígitos (n = 4) C10: -125810 = 104 – |a| = 10000 – 1258 = 8742C10 4 C9 : -125810 = 10 – 1 – |a| = 10000 – 1 – 1258 = 8741C9 Ejemplo: considerando la base binaria (b=2) y 8 dígitos (n=8), obtener el correspondiente C 1 y C2 de los siguientes valores: a = 1010 = 0000 10102 C2: -1010 = 28 – |a| = 1 0000 0000 – 0000 1010 = 1111 0110C2 0111111 100000000 - 00001010 -------------------------11110110 C1: -1010 = 28 – 1 – |a| = 1 0000 0000 – 1 – 0000 1010 = = 1111 1111 – 0000 1010 = = 1111 0101C1 11111111 - 00001010 ----------------------11110101 En la práctica, y SOLO para el sistema binario (b=2): • • El complemento a 1 se obtiene directamente sin más que cambiar en el número todos los 0’s por 1’s y viceversa. El complemento a 2 se obtiene sumando 1 al complemento a 1. Aplicando esta regla en el ejemplo anterior obtenemos los mismos resultados: a = 1010 = 0000 10102 C1 = 1111 0101 C2 = 1111 0101 + 1 = 1111 0110 Podemos comprobar que los números negativos siempre tienen el bit de signo (MSB) a 1, y los positivos a 0. 25 Estructura de computadores Tema 2: Sistemas de representación numérica Operaciones aritméticas de números con signo Suma Cuando se suman dos números binarios A y B (A+B) pueden producirse cuatro casos: • • • • A y B son positivos ⇒ A+B ≥ 0 A y B son negativos ⇒ A+B < 0 A es positivo y B negativo, con A > |B| ⇒ A+B ≥ 0 A es positivo y B negativo, con |B| > A ⇒ A+B < 0 En cualquier caso, el procedimiento de la suma es muy sencillo: sumar los dos números y descartar el bit de acarreo final (si lo hay). Ejemplos: Consideremos números con signo de 8 bits (n=8). • A y B son positivos (A=7, B=4) 710 = 0000 0111 410 = 0000 0100 00000111 +00000100 ----------------------0 0001011 • 7 +4 -----11 A y B son negativos (A=-5, B=-9) 510 = 0000 0101 910 = 0000 1001 11111011 +11110111 -----------------------1 1 1 1 1 0 010 C2 = 1111 1010 + 1 = 1111 1011 C2 = 1111 0110 + 1 = 1111 0111 -5 + -9 -------14 En este caso tenemos acarreo, que descartamos. Como la suma es negativa, el resultado está en C2. 26 Estructura de computadores Tema 2: Sistemas de representación numérica Para comprobar el resultado: C2 = b n – |a| => |a| = bn – C2. |a| = 28 – C2 = 1 0000 0000 – 1111 0010 Mod. minuendo: 01 11 1 11 100000000 - 11110010 -----------------------0 0 0 0 1 1 1 0 ==> |a| = 14 ==> a = -14 • A es positivo y B negativo, con A > |B| (A=15, B=-6) 1510 = 0000 1111 610 = 0000 0110 00001111 +11111010 ----------------------100001001 C2 = 1111 1001 + 1 = 1111 1010 15 + -6 ------9 Como siempre, el bit de acarreo se desprecia. • A es positivo y B negativo, con |B| > A (A=16, B=-24) 1610 = 0001 0000 2410 = 0001 1000 C2 = 1110 0111 + 1 = 1110 1000 00010000 +11101000 ----------------------11111000 16 + -24 --------8 Cuando se suman dos números y el número de bits requerido para representar la suma excede al número de bits de los dos números, se produce un desbordamiento (overflow), que se indica mediante un bit de signo incorrecto (p.e. negativo cuando A y B son positivos). 27 Estructura de computadores Tema 2: Sistemas de representación numérica Resta El mecanismo es cambiar el signo al sustraendo y sumar al minuendo: a – b = a + (-b) La forma de cambiar el signo al sustraendo es mediante la complementación (C1 ó C2). Complemento a 1 (C1) Utilizando la forma de C1 se puede convertir la operación de resta de dos números binarios en una operación de suma. La forma de operar consiste en calcular el C1 del sustraendo y sumarlo al minuendo. Tenemos dos posibilidades • Si se produce acarreo, éste se suma al bit menos significativo de la suma (acarreo circular), para corregir el error que se produce. • Si no hay acarreo: el resultado es negativo y la solución se obtiene complementando a 1 el resultado de la suma. Ejemplo: Calcular la diferencia 11001 – 10110, utilizando C1. Resta ordinaria: Utilizando C1: 01 11001 - 10110 ----------------00011 1 1 110 01 +01001 ---------------1 0 0 0 1 0 Acarreo + 1 ---------------00011 El C1 tiene la ventaja de que es sencillo de diseñar un circuito, pues tan solo necesita un inversor para cada bit, que se colocarán en paralelo y serán los bits de entrada de un circuito sumador. Pero el C1 tiene dos inconvenientes: • • Hay dos formas de expresar el cero (+0 y -0): +0 = 00 .. 00 -0 = 11 .. 11 La resta de dos números no es válida cuando son iguales (el resultado es –0 (cero negativo). Con el C2 se eliminan estos problemas. 28 Estructura de computadores Tema 2: Sistemas de representación numérica Complemento a 2 (C2) Del mismo modo que en C1, calculamos el C2 del substraendo y lo sumamos al minuendo. También tenemos dos posibilidades: • Si se produce acarreo: éste se desprecia (al contrario que con C1). • Si no hay acarreo: el resultado es negativo y la solución se obtiene complementando a 2 el resultado de la suma. Ejemplo: Calcular la diferencia binaria 1012 – 110112. Resta ordinaria: Utilizando C1: Utilizando C2: 00101 +00100 ---------------001001 00101 +00101 ---------------001010 0 11011 - 00101 ---------------10110 (Cambiamos el signo al final) Res: -10110 (Como no hay acarreo => C1) Res: -10110 (Como no hay acarreo => C2) Res: -10110 Resta ordinaria: como el sustraendo es menor que el minuendo, hacemos la resta poniendo el mayor como sustraendo, pero luego debemos poner el resultado como negativo. Utilizando C1 y C2: como no hay acarreo, hacemos el C1/C2, y por tanto, el resultado es negativo. 29 Estructura de computadores Tema 2: Sistemas de representación numérica Si consideramos la base decimal, la forma de operar sería la misma, teniendo que obtener el C9 o C10. Ejemplo: Calcular la diferencia 30010 – 298,6410 = 1,3610, utilizando C9 y C10: a = 298,6410 a’ = 2986410 (sin coma decimal) Utilizando C10: C10: 105 – |a’| = 100000 – 29864 = 70136 300 + 701,36 --------------1001,36 C10 = 701,36 à Bit de acarreo se desprecia: 1,36 C10: 103 – |a| = 1000 – |a| = 1000 – 298,64 = 701,36 300 + 701,36 --------------1001,36 à Bit de acarreo se desprecia: 1,36 Utilizando C9: C9: 105 – 1 – |a’| = 100000 – 1 – |a| = 99999 – 29864 = 70135 300 + 701,35 --------------1001,35 + 1 --------------1,36 C9: C9 = 701,35 à Bit de acarreo se suma al resultado 103 – 1 – |a| = 1000 – 1 – |a| = 999 – 298,64 = 700,36 300 + 700,36 --------------1000,36 + 1 --------------0,37 ¡ MAL HECHO ! à Bit de acarreo se suma al resultado RECUERDA: Para calcular el complemento (cualquiera), cuando hay decimales, se quita la coma, se hace el complemento correspondiente y de nuevo se coloca la coma. 30 Estructura de computadores Tema 2: Sistemas de representación numérica Multiplicación y División En ambos casos realizaremos la operación sin tener en cuenta el signo de los dos números binarios, y posteriormente le aplicaremos el signo, teniendo en cuenta: • Si los dos son del mismo signo: resultado positivo. • Si los dos son de diferente signo: resultado negativo. 31