Cátedra de COMPUTACION Carreras: Licenciatura en Matemática – Profesorado en Matemática Profesora: Mgr. María del Carmen Varaldo APUNTES DE CATEDRA: SISTEMAS DE NUMERACION - REPRESENTACION INTERNA DE NUMEROS Y CARACTERES Queremos conocer cómo se almacenan los datos, las instrucciones de un programa, etc. en la memoria de una computadora. Para ello es necesario considerar algunas formas alternativas de representar números. SISTEMAS DE NUMERACIÓN Nosotros utilizamos el sistema decimal para representar números a partir de los 10 dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9 y sus posiciones dentro del número. 65 V.A. 6 V.R. 6 decenas V.A. 5 V.R. 5 unidades Estas ideas pueden generalizarse. Podemos construir otros sistemas de numeración: - Binario: se basa en dos dígitos (0 y 1) - Octal : se basa en ocho dígitos (0,1,2,3,4,5,6 y 7) - Hexadecimal : se basa en dieciséis dígitos (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E y F) Estos sistemas reciben, en general, el nombre de sistemas de numeración posicionales, es decir son sistemas de numeración en los que la interpretación de un dígito en particular depende tanto del valor absoluto del dígito como de su posición en el número (valor relativo). Si se representa un número mediante la siguiente cadena de dígitos dn dn-1 ... d1 d0 entonces su valor será: dn rn + dn-1 rn-1 + ... + d1 r + d0 donde r representa la base o raíz del sistema de numeración. En el cuadro de la página siguiente, se establece una equivalencia entre distintos sistemas de numeración. Observemos que la base tiene la misma representación, 10, en todos los sistemas. Ejemplo 1: Convertir 10112 a su representación decimal. 10112 = 1 x 23 + 0 x 22 + 1 x 2 + 1 = 1110 Ejemplo 2: Convertir 2038 a su representación decimal. 2038 = 2 x 82 + 0 x 8 + 3 = 13110 Apunte: Sist. de numeración - Pág. 1 de 6 DECIMAL (r = 10) BINARIO (r = 2) OCTAL (r = 8) HEXADECIMAL (r = 16) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 10000 00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17 20 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 Los sistemas de numeración que hemos visto son de interés para la representación de información interna de una computadora. Se comete menos error si se logra representar dos estados (0 y 1) en el interior de una computadora que si se quiere distinguir diez estados diferentes. Por ello se ha elegido la representación binaria para codificar toda la información que almacena una computadora. Nuestro problema es, por lo tanto, dado un número decimal M10, encontrar todos los dígitos di, 0 i n , de la siguiente expresión : (1) M10 = dn 2n + dn-1 2n-1 + ... + d1 2 + d0 = 2 ( dn 2n-1 + dn-1 2n-2 + ... + d1 ) + d0 donde d0 es el resto que se obtiene al dividir M por 2. M10 = 2[2 ( dn 2n-2 + dn-1 2n-3 + ... + d2 ) + d1] + d0 donde d1 es el resto de la división por 2 de la expresión encerrada entre corchetes. Así es posible hallar todos los dígitos binarios que buscamos, de derecha a izquierda, dividiendo por 2, sucesivas veces, el número decimal y recolectando la secuencia de restos. Ejemplo 3: Convertir 2910 a binario 29/2 = 14 resto 1 14/2 = 7 resto 0 7/2 = 3 resto 1 3/2 = 1 resto 1 1/2 = 0 resto 1 2910 = 111012 De hecho podemos generalizar la ecuación (1) en la forma: (2) MB = dn rn + dn-1 rn-1 + ... + d1 r + d0 Apunte: Sist. de numeración - Pág. 2 de 6 donde B representa la base del número original y r la de la nueva representación. La conversión se realiza haciendo divisiones sucesivas por r, aplicando la aritmética en base B y almacenando los restos. Los sistemas octal y hexadecimal se utilizan para escribir instrucciones en un lenguaje ensamblador, para especificar direcciones de memoria, etc. REPRESENTACION DE LA INFORMACION EN UNA COMPUTADORA Unidad básica: BIT (analogía electrónica al dígito binario) "OFF" 0 "ON" 1 Los bits se agrupan para poder representar información codificada 8 bits BYTE Grupo de bytes PALABRA (word) Enteros sin signo: Imaginemos que representamos un entero como binario en una computadora, que utiliza 16 bits para almacenar dicho valor. Ejemplos: 710 se representa así 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 63210 se representa así 0 0 0 0 0 0 1 0 0 1 1 1 1 0 0 0 Con 1 bit representamos dos números (0 y 1) Con 2 bits representamos cuatro números (00, 01, 10, 11) . . . Con m bits representamos 2m números enteros no negativos (0, 1, 2, ... , 2m-1) . Enteros con signo: ¿Cómo podemos representar en binario los números negativos? a) Representación en magnitud y signo: Supongamos que se está trabajando con una computadora que tiene una configuración de m bits para almacenar números. Consideremos al bit de mayor peso (es decir, el que se ubica más a la izquierda) como bit de signo. Por convenio vale: 0 signo positivo 1 signo negativo En esta representación llamada representación en magnitud y signo, los restantes (m-1) bits se utilizan para simbolizar los enteros en su forma binaria. Ejemplos: 2910 se representa como: Apunte: Sist. de numeración - Pág. 3 de 6 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 -2910 se representa como: 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 Utilizando este sistema, el rango de números enteros z, representables con palabras de m bits, es - (2m-1 - 1) z ( 2m-1 - 1), pero se presenta un inconveniente: la representación del 0 no es única. Por ejemplo, para m = 4 tenemos: 0 0000 -0 1000 Aunque matemáticamente 0 y -0 es lo mismo, el método de representación en magnitud y signo nos conduce a dos representaciones distintas de la misma entidad, el 0. Por esta razón, ya que complicaría el diseño de los circuitos de las computadoras, no se utiliza este método para representar los enteros. b) Representación en complemento a dos: Ésta es una alternativa para resolver el problema presentado antes. Los enteros positivos se representan igual que los enteros sin signo. Ahora vamos a convenir que los números que empiecen con 0 los interpretamos como positivos y los que empiecen con 1, como negativos. Si trabajamos en una configuración de m bits para representar los enteros podemos deducir que el rango para los enteros positivos es: de 00.....0 a m ceros o sea 0 z 01.....1 (m-1) unos 2m-1 - 1. En cambio, para representar los enteros negativos nos quedan los valores binarios de 10.....0 a (m – 1) ceros 11.....1 m unos ¿Qué relación podemos establecer entre este rango y los enteros negativos? 1. El rango anterior, en base 10, lo podemos escribir de 2m-1 a -2m-1 a -1 2m-1 (A) ( 2m - 1) b 2m-1 (B) 2. Supongamos que establecemos una correspondencia biunívoca entre el intervalo (A) de enteros negativos y el (B). Por lo tanto, un entero a en (A) tendrá un valor correspondiente b en (B). 3. Proponemos que la distancia entre 0 y a sea la misma que entre 2m y b. Es decir Apunte: Sist. de numeración - Pág. 4 de 6 dist (0, a) dist(2m , b) 2m - b a 2m b 2m - 1 a 1 a 2m - 1 a 1 Por lo tanto, adoptamos como representación b de un entero negativo a lo siguiente: a 2m - 1 b a 1 2 Entonces, en general, podemos describir la representación en complemento a dos como: i) si 0 ii) si - 2m-1 z 2m-1 - 1 z z z2 (representación binaria de z en m bits) 2m - 1 -z -1 z 1 2 Por lo tanto, el rango de representación de números enteros en una configuración de m bits es: - 2m-1 z 2m-1 - 1 Ejemplos: 1. Para m = 16, se tiene -215 z 215 - 1 - 32768 z 32767 2. z = +10 m = 8 Su representación binaria es 0 0 0 0 1 3. z = -10 m = 8 Su representación binaria es ( (28 - 1) + 1- 10 )2 28 - 1 - 0 1 0 1 1 0 11111111 - 10 00001010 11110101 + + 1 1 11110110 1 1 1 1 0 En el ejemplo 3 vemos que (2m - 1)2 resulta ser una cadena de m unos. La sustracción de cualquier número binario de otro que tiene todos sus bits iguales a 1 es sencilla. Observemos que 1 - 0 = 1 y 1 - 1 = 0. Es decir, (2m - 1)2 - │z│2 se obtiene cambiando todos los unos por ceros y los ceros por unos en │z│2 . La operación de "invertir" los bits de un número binario se llama cálculo de complemento a uno. Podemos deducir, entonces, que el complemento a dos de un número binario se calcula sumando 1 al complemento a uno del mismo. Volviendo al ejemplo 3: z (28 - 1)2 - │z│2+ 1 donde │z│2 = 1010 Cálculo práctico: escribir el │z│ en binario 00001010 Apunte: Sist. de numeración - Pág. 5 de 6 aplicar complemento a uno sumar 1, según aritmética binaria 11110101 11110110 Por último, veamos qué pasa con la representación en complemento a dos para el 0. +0 00....0 m ceros -0 0....00 1....11 + 0....01 escribimos el 0 en base 2 aplicamos complemento a uno sumamos 1, según aritmética binaria 10....00 se ignora En ambos casos quedan m ceros y por lo tanto, la representación es única. En las computadoras que trabajan en complemento a dos, no es necesario construir un circuito restador separado del sumador. La resta puede realizarse complementando al sustraendo y sumándoselo al minuendo. En cambio, en el sistema de magnitud y signo, sería necesario un circuito restador. REPRESENTACIÓN DE NÚMEROS CON PUNTO FLOTANTE (reales) Hemos visto cómo representar enteros, pero en la mayoría de los problemas prácticos necesitamos trabajar con los números reales, como 45,89 ó 865 x 10-5. Uno de los inconvenientes que se presenta al realizar ciertos cálculos es seguir la pista a la coma decimal. Ante problemas de cierta complejidad que requieren números reales de magnitudes muy diferentes, se hace necesario normalizar la representación de los números y disponer de algún sistema automático que garantice la posición correcta de la coma (o punto) después de cada operación. Uno de estos sistemas es la notación de punto flotante. Ejemplos: 56.234 3902 0.07 -29.50 = 0.56234 x 102 = 0.3902 x 104 = 0.7 x 10-3 = - 0.295 x 102 En general, todo número real puede escribirse como: 0.a E b o bien 0.a x 10b Luego, para su representación sólo necesitamos dos números enteros a y b . Se utiliza una notación que permita trabajar cualquier magnitud con la misma cantidad de cifras significativas. Internamente, a y b se representan utilizando números binarios ( a x 2b ) y según con qué tipo de aritmética se trabaje (precisión standard o extendida) variará la cantidad de cifras significativas para a (7,9,etc.) . Bibliografía: A. Tucker et al. , “Fundamentos de Informática: Lógica, resolución de problemas, programas y computadores”, McGraw-Hill, 1994. Apunte: Sist. de numeración - Pág. 6 de 6