2. El sistema de numeración binario Oliverio J. Santana Jaria Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso 2005 – 2006 Introducción Todos estamos familiarizados con el sistema de numeración decimal, ya que lo usamos cada día En los ordenadores, así como en la electrónica digital en general, se utiliza el sistema de numeración binario Todos las operaciones realizadas por un sistema digital usan únicamente los símbolos 0 y 1 Todos los números y datos de un computador tienen que representarse en forma binaria Los objetivos de este tema son: Describir el sistema de numeración binario Describir las operaciones básicas de la aritmética binaria El sistema de numeración binario 2 1 Estructura del tema Introducción Sistemas de numeración El sistema decimal El sistema binario Los sistemas octal y hexadecimal Operaciones básicas Operaciones con números enteros Aritmética binaria Signo-magnitud ▫ Complemento a 1 ▫ Complemento a 2 ▫ Formato de representación en coma flotante Resumen y bibliografía El sistema de numeración binario 3 El sistema decimal El sistema decimal utiliza diez dígitos para representar una cantidad Se pueden representar cantidades del 0 al 9 0 1 2 3 4 5 6 7 8 9 Para cantidades mayores que 9 hay que combinar dígitos 10 11 12 13 14 15 16 17 18 19 20 21… El sistema decimal es un sistema de numeración posicional, es decir, un mismo dígito tiene diferentes valores en función de la posición que ocupe El sistema de numeración binario 4 2 Estructura de pesos decimal La posición de cada dígito dentro de un número decimal indica la magnitud representada A cada posición se le asigna un valor llamado peso Dado que tenemos 10 dígitos, los pesos son potencias de 10 Decimos que el sistema decimal es un sistema en base 10 Los pesos de los números enteros son potencias positivas de 10 que aumentan de derecha a izquierda 0 …104 103 102 101 100 empezando por 10 Los pesos de los números fraccionarios son potencias negativas de 10 que aumentan de izquierda a derecha -1 empezando por 10 …101 100 ’ 10–1 10–2 10–3… El sistema de numeración binario 5 Números decimales El valor de un número decimal es la suma de sus dígitos después de haber multiplicado cada dígito por su peso Ejemplo: 21.264 2 1 2 6 4 104 103 102 101 100 21264 = (2 x 104) + (1 x 103) + (2 x 102) + (6 x 101) + (4 x 100) 21264 = (2 x 10000) + (1 x 1000) + (2 x 100) + (6 x 10) + (4 x 1) 21264 = 20000 + 1000 + 200 + 60 + 4 El sistema de numeración binario 6 3 Números decimales El valor de un número decimal es la suma de sus dígitos después de haber multiplicado cada dígito por su peso Ejemplo: 318’23 3 1 8 ’ 2 102 101 100 3 10–1 10–2 318’23 = (3 x 102) + (1 x 101) + (8 x 100) + (2 x 10–1) + (3 x 10–2) 318’23 = (3 x 100) + (1 x 10) + (8 x 1) + (2 x 0,1) + (3 x 0,01) 318,23 = 300 + 10 + 8 + 0,2 + 0,03 El sistema de numeración binario 7 Estructura del tema Introducción Sistemas de numeración El sistema decimal El sistema binario Los sistemas octal y hexadecimal Aritmética binaria Operaciones básicas Operaciones con números enteros ▫ Signo-magnitud ▫ Complemento a 1 ▫ Complemento a 2 Formato de representación en coma flotante Resumen y bibliografía El sistema de numeración binario 8 4 El sistema binario El sistema binario es un sistema de numeración bits): el 0 y el 1 posicional con dos dígitos distintos ( Dado que tenemos 2 dígitos, los pesos son potencias de 2 Decimos que el sistema binario es un sistema en base 2 Los pesos de los números enteros son potencias positivas de 2 que aumentan de derecha a izquierda 0 … 24 23 22 21 20 empezando por 2 Los pesos de los números fraccionarios son potencias negativas de 2 que aumentan de izquierda a derecha empezando por 2 –1 … 21 20 ’ 2–1 2–2 2–3… El sistema de numeración binario 9 Contar en binario decimal El sistema decimal es un sistema de numeración posicional con diez dígitos distintos En decimal podemos contar hasta 9 sin repetir ningún dígito 0 1 2 3 4 5 6 7 8 9 Dicho de otra manera, usando 1 1 dígito podemos contar 10 distintos (desde 0 hasta El sistema de numeración binario números 1 10 – 1) 10 5 Contar en binario decimal A partir de 9 nos vemos obligados a repetir dígitos 2 Con 2 dígitos podemos contar 10 2 números (desde 0 hasta 10 3 Con 3 dígitos podemos contar 10 3 números (desde 0 hasta 10 – 1) En general, con – 1) n dígitos podemos números distintos, es decir, desde 0 hasta 10n – 1 contar n 10 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 El sistema de numeración binario 11 Contar en binario El sistema binario es un sistema de numeración posicional con dos dígitos distintos (bits): el 0 y el 1 En binario sólo podemos contar hasta 1 sin repetir bits Dicho de otra manera, usando 1 bit podemos contar 21 números distintos (desde 0 hasta 21 – 1) El sistema de numeración binario decimal 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 binario 0 1 12 6 Contar en binario Para contar más allá de 1 nos vemos obligados a combinar bits Con 2 bits podemos contar 22 números (desde 0 hasta 22 – 1) decimal 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 binario 00 01 10 11 El sistema de numeración binario 13 Contar en binario Con 3 bits podemos contar 2 3 números (desde 0 hasta 23 – 1) El sistema de numeración binario decimal 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 binario 000 001 010 011 100 101 110 111 14 7 Contar en binario Con 4 bits podemos contar 2 4 números (desde 0 hasta 24 – 1) En general, con n bits podemos contar 2n números distintos, es decir, desde 0 hasta 2n – 1 decimal binario 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 El sistema de numeración binario 15 Pesos de un número binario Un número entero tendrá la siguiente estructura de pesos, siendo n el número de bits 2n-1 … 24 23 bit más significativo 22 21 20 bit menos significativo Un número fraccionario tendrá la siguiente estructura de pesos, siendo n el número de bits de la parte entera y m el número de bits de la parte fraccionaria 2n-1 … 22 21 20 ’ 2–1 2–2 2–3 … 2–m coma fraccionaria El sistema de numeración binario 16 8 Conversión binario a decimal El valor decimal de cualquier número binario se puede determinar sumando los pesos de todos los bits 1 y descartando los pesos de todos los bits 0 Ejemplo: 1101101 1 1 0 1 1 0 1 26 25 24 23 22 21 20 1101101 = 1x26 + 1x25 + 0x24 + 1x23 + 1x22 + 0x21 + 1x20 1101101 = 1x64 + 1x32 + 0x16 + 1x8 + 1x4 + 0x2 + 1x1 1101101 = 64 + 32 + 8 + 4 + 1 = 109 El sistema de numeración binario 17 Conversión binario a decimal Otro ejemplo: 10011001110 1 0 0 1 1 0 0 1 1 1 0 210 29 28 27 26 25 24 23 22 21 20 10011001110 = 1x210 + 0x29 + 0x28 + 1x27 + 1x26 + 0x25 + 0x24 + 1x23 + 1x22 + 1x21 + 0x20 10011001110 = 1x1024 + 0x512 + 0x256 + 1x128 + 1x64 + 0x32 + 0x16 + 1x8 + 1x4 + 1x2 + 0x1 10011001110 = 1024 + 128 + 64 + 8 + 4 + 2 = 1230 El sistema de numeración binario 18 9 Conversión binario a decimal Para convertir números fraccionarios es importante recordar el significado de las potencias negativas 2-1 = 1/(21) = 0’5 10-1 = 1/(101) = 0’1 Ejemplo: 0,1011 0 ’ 1 0 1 20 2–2 2–1 1 2–3 2–4 0’1011 = 0x20 + 1x2–1 + 0x2–2 + 1x2–3 + 1x2–4 0’1011 = 0x1 + 1x0’5 + 0x0’25 + 1x0’125 + 1x0’0625 0’1011 = 0’5 + 0’125 + 0’0625 = 0’6875 El sistema de numeración binario 19 Conversión binario a decimal Otro ejemplo: 1101’010101 1 1 0 1 23 22 21 20 ’ 0 1 0 1 1 2-1 2-2 2-3 2-4 2-5 1101’01011 = 1x23 + 1x22 + 0x21 + 1x20 + 0x2–1 + 1x2–2 + 0x2–3 + 1x2–4 + 1x2–5 1101’01011 = 1x8 + 1x4 + 0x2 + 1x1 + 0x0’5 + 1x0’25 + + 0x0’125 + 1x0’0625 + 1x0’03125 1101’01011 = 8 + 4 + 1 + 0’25 + 0’0625 + 0’03125 = 13’34375 El sistema de numeración binario 20 10 Conversión decimal a binario El método de la suma de pesos consiste en determinar el conjunto de pesos binarios que suman el número Se resta al número la mayor potencia de 2 que no lo sobrepase y se repite el proceso sobre el resultado El proceso concluye cuando el resultado es 0 ó cuando se ha obtenido el número deseado de cifras fraccionarias Se asigna un 1 al peso de las potencias de 2 usadas Ejemplo: 82 27 = 128 26 = 64 25 = 32 24 = 16 23 = 8 22 = 4 21 = 2 20 = 1 82 – 64 = 18 26 18 – 16 = 2 24 2–2=0 21 82 = 1010010 El sistema de numeración binario 21 Conversión decimal a binario Otro ejemplo con la suma de pesos: 411’7401 411’7401 – 256 = 155’7401 28 155’7401 – 128 = 27’7401 27 27’7401 – 16 = 11’7401 24 11,7401 – 8 = 3’7401 23 3,7401 – 2 = 1’7401 21 1,7401 – 1 = 0’7401 20 0,7401 – 0,5 = 0’2401 2–1 0,2401 – 0,125 = 0’1151 2–3 0,1141 – 0,0625 = 0’50526 2–4 411’7401 = 110011011’1011… El sistema de numeración binario 29 = 512 28 = 256 27 = 128 26 = 64 25 = 32 24 = 16 23 = 8 22 = 4 21 = 2 20 = 1 2–1 = 0’5 2–2 = 0’25 2–3 = 0’125 2–4 = 0’0625 2–5 = 0’03125 22 11 Conversión decimal a binario El método de las divisiones sucesivas tiene la ventaja de ser más sistemático que el de la suma de pesos Se divide el número entre 2 y se repite el proceso sobre el resultado hasta que el resto de la división sea 0 ó 1 El cociente de la última división será el bit más significativo Los demás bits serán los restos de las divisiones en orden inverso, hasta llegar al resto de la primera división, que será el bit menos significativo Un ejemplo: 12 12 0 2 6 0 2 3 1 2 1 12 = 1100 El sistema de numeración binario 23 Conversión decimal a binario El método de las divisiones sucesivas se aplica a la parte entera de los números decimales La parte fraccionaria puede convertirse de manera similar, pero usando multiplicaciones por 2 La parte entera de los resultados se descarta, dando lugar, en orden inverso, a los dígitos binarios buscados El proceso se detiene cuando el resultado es 0 o cuando se obtiene el número deseado de cifras fraccionarias 0’3125 x 2 = 0,625 0,625 x 2 = 1,25 0,25 x 2 = 0,5 0,5 x 2 = 1,0 0’3125 = 0’0101 0 Ejemplo: 0’3125 El sistema de numeración binario 24 12 Conversión decimal a binario Un ejemplo con divisiones y multiplicaciones: 25’7187 25 1 2 12 0 0’7187 x 2 = 1,4374 2 6 0 0’4374 x 2 = 0,8748 2 3 1 2 1 0’8748 x 2 = 1,7496 0’7496 x 2 = 1’4992 0’4992 x 2 = 0’9984 0,9984 x 2 = 1’9968 … 25’7187 = 11001’101101… El sistema de numeración binario 25 Indicar la base Dado que trabajamos con números expresados en distintas bases, es importante indicar siempre en que base está representado cada número 1110 en binario ≠ 1110 en decimal 1110 en binario = 14 en decimal 1110 en decimal = 10001010110 en binario Por ejemplo, podemos indicar la base usando un subíndice justo después del número 1110(2) ≠ 1110(10) 1110(2) = 14(10) 1110(10) = 10001010110(2) El sistema de numeración binario 26 13 Estructura del tema Introducción Sistemas de numeración El sistema decimal El sistema binario Los sistemas octal y hexadecimal Aritmética binaria Operaciones básicas Operaciones con números enteros ▫ Signo-magnitud ▫ Complemento a 1 ▫ Complemento a 2 Formato de representación en coma flotante Resumen y bibliografía El sistema de numeración binario 27 El sistema octal Los números binarios largos son difíciles de leer o escribir, ya que es fácil cometer un error El sistema octal es un sistema de numeración posicional en base 8 Existen 8 dígitos distintos: 0, 1, 2, 3, 4, 5, 6, 7 Los pesos son potencias de 8 Dado que la base del sistema octal es múltiplo de 2, las conversiones entre octal y binario son muy fáciles El sistema octal se utiliza como forma simplificada de representar números binarios El sistema de numeración binario 28 14 Contar en octal Usando 1 dígito octal podemos contar 81 números distintos, 1 desde 0 hasta 8 – 1 decimal 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 octal 0 1 2 3 4 5 6 7 El sistema de numeración binario 29 Contar en octal Usando 2 dígitos octales 2 podemos contar 8 números 2 distintos, desde 0 hasta 8 En general, con – 1 n dígitos octales podemos contar desde n 0 hasta 8 – 1 El sistema de numeración binario decimal octal 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17 30 15 Equivalencia octal – binario 3 Cada dígito octal equivale a un grupo de 3 bits (2 = 8) Dado que 8 es potencia de dos, la conversión de números entre octal y binario resulta trivial octal binario 0 1 2 3 4 5 6 7 000 001 010 011 100 101 110 111 43726(8) = 100 011 111 010 110(2) El sistema de numeración binario 31 Conversión decimal – octal Para convertir un número octal a decimal debemos sumar el valor de cada dígito multiplicado por su peso 2374(8) = 2x83 + 3x82 + 7x81 + 4x80 = 1276(10) Para convertir un número decimal a octal debemos aplicar el método de las divisiones/multiplicaciones sucesivas, pero esta vez utilizando la base 8 1276 4 8 159 7 El sistema de numeración binario 8 19 3 8 2 1276(10) = 2374(8) 32 16 Estructura del tema Introducción Sistemas de numeración El sistema decimal El sistema binario Los sistemas octal y hexadecimal Aritmética binaria Operaciones básicas Operaciones con números enteros ▫ Signo-magnitud ▫ Complemento a 1 ▫ Complemento a 2 Formato de representación en coma flotante Resumen y bibliografía El sistema de numeración binario 33 El sistema hexadecimal El sistema hexadecimal es un sistema de numeración posicional en base 16 Existen 16 dígitos distintos: 0…9, A, B, C, D, E, F Los pesos son potencias de 16 Dado que la base del sistema hexadecimal es múltiplo de 2, las conversiones entre hexadecimal y binario son muy fáciles El sistema hexadecimal es la forma más frecuente usada para simplificar la representación de números binarios El sistema de numeración binario 34 17 Contar en hexadecimal Usando 1 dígito hexadecimal 1 podemos contar 16 números 1 distintos, desde 0 hasta 16 – 1 A partir de F debemos empezar a combinar dígitos, es decir, el siguiente número es 10, el siguiente 11,…, 1F, 20, 21,… En general, con n dígitos hexadecimales podemos contar n 16 números distintos, es decir, n desde 0 hasta 16 – 1 decimal hexadecimal 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0 1 2 3 4 5 6 7 8 9 A B C D E F El sistema de numeración binario 35 Equivalencia hexadecimal – binario Dado que 16 es potencia de dos, la conversión de números entre hexadecimal y binario resulta trivial Cada dígito hexadecimal equivale a 4 un grupo de 4 bits (2 = 16) A3F26(16) = 1010 0011 1111 0010 0110(2) F6100(16) = 1111 0110 0001 0000 0000(2) FFFFF(16) = 1111 1111 1111 1111 1111(2) El sistema de numeración binario hexadecimal binario 0 1 2 3 4 5 6 7 8 9 A B C D E F 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 36 18 Conversión decimal – hexadecimal Para convertir un número hexadecimal a decimal debemos sumar el valor de cada dígito multiplicado por el valor de su peso 29C(16) = 2x162 + 9x161 + Cx160 = 2x162 + 9x161 + 12x160 = 668(10) Para convertir un número decimal a hexadecimal usaremos el método de las divisiones/multiplicaciones sucesivas, pero esta vez utilizando la base 16 668 12 16 41 9 16 2 668(10) = 29C(16) El sistema de numeración binario 37 Estructura del tema Introducción Sistemas de numeración El sistema decimal El sistema binario Los sistemas octal y hexadecimal Aritmética binaria Operaciones básicas Operaciones con números enteros ▫ Signo-magnitud ▫ Complemento a 1 ▫ Complemento a 2 Formato de representación en coma flotante Resumen y bibliografía El sistema de numeración binario 38 19 Aritmética binaria La aritmética binaria es esencial en los ordenadores y en muchos otros tipos de sistemas digitales Para comprender los sistemas aritméticos digitales es necesario conocer los principios básicos de la suma, la resta, la multiplicación y la división binarias Afortunadamente, las técnicas utilizadas en estas operaciones son similares a las técnicas usadas en la aritmética decimal a la que estamos acostumbrados El sistema de numeración binario 39 Suma binaria La operación de suma se estructura en columnas El bit menos significativo del resultado de una columna es la suma de dicha columna El bit más significativo del resultado de una columna pasa como acarreo a la columna siguiente Las cuatro reglas básicas de la suma binaria son: suma 0, acarreo 0 0 + 1 = 01 suma 1, acarreo 0 1 + 0 = 01 suma 1, acarreo 0 1 + 1 = 10 suma 0, acarreo 1 0 + 0 = 00 El sistema de numeración binario 40 20 Suma binaria En el momento en el que aparece un acarreo igual a 1 nos vemos obligados a sumar tres bits en lugar de dos suma 1, acarreo 0 1 + 0 + 1 = 10 suma 0, acarreo 1 1 + 1 + 0 = 10 suma 0, acarreo 1 1 + 1 + 1 = 11 suma 1, acarreo 1 1 + 0 + 0 = 01 Ejemplo: 1110 + 1010 1 1 1 1 1 0 14 + 1 0 1 0 + 10 1 1 0 0 0 24 El sistema de numeración binario 41 Suma binaria Otro ejemplo: 1001001010’11 + 1101010111’1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 1 0 ’ 1 1 + 1 1 0 1 0 1 0 1 1 1 ’ 1 0 1 0 1 1 0 1 0 0 0 1 0 ’ 0 1 586’75 + 855’5 = 1442’25 El sistema de numeración binario 42 21 Resta binaria La operación de resta también se organiza en columnas Si el minuendo es menor que el sustraendo El resultado de la resta es la diferencia entre los dos Se produce un acarreo negativo, es decir, sumamos 1 al sustraendo de la siguiente columna En binario sólo se producirá un acarreo negativo cuando se intenta restar 0 menos 1 Ejemplo: 1101 - 111 – 1 1 1 1 0 1 13 0 1 1 1 – 7 0 1 1 0 6 El sistema de numeración binario 43 Resta binaria Otro ejemplo: 1010101110’10 – 1001110100’01 1 0 1 0 1 0 1 1 1 0 ’ 1 0 1 1 1 1 – 1 0 0 1 1 1 0 1 0 0 ’ 0 1 0 0 0 0 1 1 1 0 1 0 ’ 0 1 686’5 – 628’25 = 58’25 El sistema de numeración binario 44 22 Multiplicación binaria Las reglas básicas de la multiplicación binaria son: 0x0=0 1x0=0 0x1=0 1x1=1 La multiplicación se realiza generando productos parciales, desplazando cada nuevo producto parcial una posición a la izquierda y luego sumándolos todos Ejemplo: 11 x 10 1 x 1 0 + 1 1 1 0 0 1 0 El sistema de numeración binario 1 3 x 2 6 45 Multiplicación binaria Otro ejemplo: 11010 x 101 1 1 0 1 0 x 1 0 1 1 1 1 0 1 0 0 0 0 0 0 1 1 + 1 1 0 1 0 1 0 0 0 0 0 1 0 El sistema de numeración binario 26 x 5 = 130 46 23 División binaria La división binaria sigue el procedimiento tradicional de multiplicación y resta al que estamos acostumbrados Ejemplo: 110 / 11 1 1 – 1 1 0 0 – 0 0 1 1 1 0 6 0 3 2 0 0 0 El sistema de numeración binario 47 División binaria Otro ejemplo: 100011 / 110 1 0 0 0 1 1 1 1 – 1 1 0 1 1 0 1 0 1 0 0 1 0 1 1 1 – 1 1 0 0 1 0 1 35 / 6 = 5 (resto = 5) El sistema de numeración binario 48 24 Estructura del tema Introducción Sistemas de numeración El sistema decimal El sistema binario Los sistemas octal y hexadecimal Operaciones básicas Operaciones con números enteros Aritmética binaria ▫ Signo-magnitud ▫ Complemento a 1 ▫ Complemento a 2 Formato de representación en coma flotante Resumen y bibliografía El sistema de numeración binario 49 Números con signo Los sistemas digitales deben ser capaces de manejar tanto números positivos como números negativos Un número binario con signo se caracteriza por su magnitud y su signo La magnitud indica el valor del número El signo indica si es positivo o negativo Vamos a ver tres formatos binarios para representar números enteros En todos ellos, el bit más significativo representa el signo Todos los números en un ordenador tienen la mismo cantidad de bits, por lo que el bit de signo tiene una posición fija El sistema de numeración binario 50 25 Signo-magnitud El bit más a la izquierda representa el signo del número y el resto de bits representan la magnitud del número Un número negativo tiene los mismos bits de magnitud que su versión positiva, pero distinto bit de signo Se utiliza un 0 para el signo positivo Se utiliza un 1 para el signo negativo Dado que los ordenadores tienen números de tamaño fijo, supondremos un número fijo de bits (por ejemplo 8) 26 25 24 23 22 21 20 0 0 0 1 0 1 0 1 1 0 0 1 0 1 0 1 16 + 4 + 1 21 16 + 4 + 1 –21 El sistema de numeración binario 51 Rango de valores en signo-magnitud Los números binarios naturales de n bits pueden tener valores que van 0 001 1 Dado que los números en formato 010 2 signo-magnitud usan un bit de signo, 011 3 100 –0 101 –1 110 –2 111 –3 un número de n bits sólo dedicará n – 1) bits a representar la magnitud ( decimal 000 n desde 0 hasta 2 – 1 binario Los números en signo-magnitud pueden tener valores que van desde n–1 –(2 n–1 – – 1) hasta +(2 El sistema de numeración binario 1) 52 26 Aritmética en signo-magnitud Suma y resta en signo-magnitud Se comparan el signo y la magnitud de los operandos Si el signo de los operandos es el mismo se suman las magnitudes y se mantiene el mismo signo Si el signo de los operandos es distinto, se resta la magnitud mayor menos la menor y se pone el signo de la mayor Multiplicación y división en signo-magnitud: Se multiplican o dividen las magnitudes Si los operandos tienen el mismo signo el resultado es positivo; en caso contrario el resultado es negativo El sistema de numeración binario 53 Desventajas en signo-magnitud En el formato signo-magnitud existen dos ceros, uno positivo y otro negativo, pero con el mismo significado La multiplicación y la división pueden hacerse basándose en sumas y restas, pero es necesario tener circuitos capaces tanto de sumar como de restar Dado que las operaciones de suma y resta necesitan realizar comparaciones, los circuitos aritméticos en signo magnitud tienden a ser más lentos de lo deseado El sistema de numeración binario 54 27 Estructura del tema Introducción Sistemas de numeración El sistema decimal El sistema binario Los sistemas octal y hexadecimal Aritmética binaria Operaciones básicas Operaciones con números enteros ▫ Signo-magnitud ▫ Complemento a 1 ▫ Complemento a 2 Formato de representación en coma flotante Resumen y bibliografía El sistema de numeración binario 55 Complemento a 1 El complemento a 1 de un número binario se obtiene cambiando todos los 0 por 1 y todos los 1 por 0 Los números positivos se representan igual que los números positivos en formato signo-magnitud Los números negativos son el complemento a 1 del correspondiente número positivo 0 0 0 1 0 1 0 1 1 1 1 0 1 0 1 0 –21 El sistema de numeración binario 21 56 28 Valor decimal en complemento a 1 El valor decimal de los números positivos se calcula de la misma manera que en signo-magnitud 26 25 24 23 22 21 20 0 0 0 1 0 1 0 1 16 + 4 + 1 21 El valor de los números negativos se calcula asignando el valor negativo al peso del bit de signo y luego sumando uno al resultado –27 26 25 24 23 22 21 20 1 1 1 0 1 0 1 0 –128 + 64 + 32 + 8 + 2 –22 + 1 –21 El sistema de numeración binario 57 Rango de valores en complemento a 1 El bit más significativo de los números en formato complemento a 1 0 001 1 010 2 011 3 100 –3 Los números en complemento a 1 101 –2 pueden tener valores que van desde 110 –1 111 –0 Un número de n bits sólo dedicará n – 1) bits a representar la magnitud ( decimal 000 identifica el signo binario n–1 –(2 n–1 – – 1) hasta +(2 El sistema de numeración binario 1) 58 29 Generalización: complemento a la base – 1 El complemento a la base menos uno de un número se calcula restándolo a la potencia de la base que se corresponde con la cantidad de dígitos del número y luego restando uno al resultado Sistema decimal Complemento a 9 Con 2 dígitos decimales 28 100 Sistema binario Complemento a 1 Con 3 bits 011(2) 1000(2) – 011(2) – 1 = 100(2) (10) (10) – 28(10) – 1 = 71(10) La conversión de un número a este formato se puede realizar de forma sencilla, dígito a dígito en binario se intercambian 0’s y 1’s: 011(2) en decimal se resta cada dígito a 9: 28(10) 100 71 (2) (10) El sistema de numeración binario 59 Generalización: complemento a la base – 1 Representando los números negativos en complemento a la base menos uno se simplifica la operación de resta La resta de dos números se expresa como la suma de un número positivo y otro negativo El minuendo se mantiene positivo El sustraendo se pasa a negativo calculando su complemento a la base menos uno con 3 bits 011 (2) – 011(2) = 0(2) con 2 dígitos decimales 28 El sistema de numeración binario (10) 011 (2) + 100(2) = 111(2) = – 0 – 28(10) = 0(10) 28 (10) + 71 (10) = 99(10) = – 0 60 30 Aritmética en complemento a 1 La operación de resta es innecesaria: para restar podemos limitarnos a sumar el complemento a 1 del número que queremos restar Por ejemplo, suponiendo números de 8 bits (1 byte): 00011000 – 00011001 = 00011000 + 11100110 0 0 0 1 1 0 0 0 +1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 0 24 – 25 = 24 + (–25) = –1 La multiplicación y la división también pueden realizarse partiendo de la suma El sistema de numeración binario 61 Aritmética en complemento a 1 La suma puede producir un acarreo en la última columna, que no puede representarse en 8 bits Para obtener el valor correcto debemos sumar este acarreo al resultado de la suma Por ejemplo, suponiendo de nuevo números de 8 bits: 00011001 – 00011000 = 00011001 + 11100111 + 0 0 0 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 1 El sistema de numeración binario 25 – 24 = 25 + (–24) = 1 62 31 Desbordamiento Dado que los números en un ordenador tienen una cantidad fija de bits, es posible un desbordamiento, es decir, que el resultado tenga demasiados bits Podremos identificar un resultado como incorrecto a causa de un desbordamiento porque no tendrá el signo que debería tener + 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 127 3 –125 Dos sumandos positivos no pueden sumar negativo El sistema de numeración binario 63 Desventajas del complemento a 1 En el formato complemento a 1 existen dos ceros, uno positivo y otro negativo, pero con el mismo significado La multiplicación, la división y la resta pueden hacerse basándose en sumas, pero los circuitos sumadores se complican porque en determinadas circunstancias hay que sumar un acarreo al resultado Debido a esta complicación, los circuitos aritméticos en complemento a 1 también tienden a ser más lentos de lo que se querría El sistema de numeración binario 64 32 Estructura del tema Introducción Sistemas de numeración El sistema decimal El sistema binario Los sistemas octal y hexadecimal Aritmética binaria Operaciones básicas Operaciones con números enteros ▫ Signo-magnitud ▫ Complemento a 1 ▫ Complemento a 2 Formato de representación en coma flotante Resumen y bibliografía El sistema de numeración binario 65 Complemento a 2 El complemento a 2 de un número binario se obtiene sumando uno al bit menos significativo del complemento a 1 del número 0 0 0 1 0 1 0 1 1 1 1 0 1 0 1 0 + 1 1 1 1 0 1 0 1 1 21 –21 Un método alternativo es comenzar por el bit menos significativo hasta encontrar un 1 y luego hacer el complemento a 1 del resto del número El sistema de numeración binario 66 33 Valor decimal en complemento a 2 El valor decimal de los números positivos y negativos se calcula sumando los pesos de todas las posiciones en las que haya un 1 27 26 25 24 23 22 21 20 0 0 0 1 0 1 0 1 16 + 4 + 1 21 Al bit de signo de los números negativos se le asigna un peso negativo –27 26 25 24 23 22 21 20 1 1 1 0 1 0 1 1 –128 + 64 + 32 + 8 + 2 + 1 –21 El sistema de numeración binario 67 Rango de valores en complemento a 2 El bit más significativo de los números en formato complemento a 2 0 001 1 010 2 011 3 100 –4 Los números en signo-magnitud 101 –3 pueden tener valores que van desde 110 –2 111 –1 Un número de n bits sólo dedicará n – 1) bits a representar la magnitud ( decimal 000 identifica el signo binario n–1) –(2 n–1 – hasta +(2 El sistema de numeración binario 1) 68 34 Generalización: complemento a la base El complemento a la base de un número se calcula restándolo a la potencia de la base correspondiente a la cantidad de dígitos del número Sistema decimal Complemento a 10 Con 2 dígitos decimales 28 100 Sistema binario Complemento a 2 Con 3 bits 011(2) 1000(2) – 011(2) = 101(2) (10) (10) – 28(10) = 72(10) Representando los números negativos en complemento a la base se simplifica la resta, permitiendo expresarla como la suma de un número positivo y otro negativo Con 3 bits 011 (2) – 011(2) = 0(2) Con 2 dígitos decimales 28 (10) 011 (2) + 101(2) = 1000(2) – 28(10) = 0(10) 28 (10) + 72 (10) = 100(10) El sistema de numeración binario 69 Ventajas del complemento a 2 Solo existe una representación del cero Todas las operaciones pueden hacerse con un circuito sumador, más simple que el usado por signo-magnitud o complemento a 1 y, por tanto, más rápido Por estos motivos, el complemento a 2 es el formato más utilizado por los ordenadores actuales binario signo-magnitud complemento a 1 complemento a 2 000 001 010 011 100 101 110 111 0 1 2 3 –0 –1 –2 –3 0 1 2 3 –3 –2 –1 –0 0 1 2 3 –4 –3 –2 –1 El sistema de numeración binario 70 35 Suma en complemento a 2 Dado que el complemento a 2 es el formato más usado, estudiaremos su aritmética con más detalle Vamos a suponer que los números con los que trabajaremos tienen 8 bits (1 byte) A la hora de sumar dos números en complemento a 2, existen cuatro situaciones posibles Ambos números son positivos Los dos números tienen distinto signo ▫ El número positivo tiene un valor absoluto mayor que el negativo ▫ El número negativo tiene un valor absoluto mayor que el positivo Ambos números son negativos El sistema de numeración binario 71 Suma en complemento a 2 Si los dos valores sumados son positivos, el resultado también será positivo overflow), Existe la posibilidad de un desbordamiento ( es decir, de obtener un resultado incorrecto porque necesita más bits de los que se pueden representar 0 1 1 1 1 1 0 1 1 1 1 1 + 0 0 1 1 1 0 1 0 1 1 1 1 0 1 1 1 125 58 183 (max = 2 – 1 = 127) 7 Overflow!! El resultado debe ser positivo El sistema de numeración binario 72 36 Suma en complemento a 2 Si los dos valores sumados son negativos el resultado también será negativo carry) Existe la posibilidad de que aparezca un acarreo ( pero no invalida el resultado y debe descartarse 1 1 1 1 1 0 1 1 1 1 1 1 1 + 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 –5 –6 –11 Carry!! Se descarta y el resultado es correcto El sistema de numeración binario 73 Suma en complemento a 2 Si los dos valores sumados son negativos también existe la posibilidad de que ocurra un desbordamiento y, por tanto, el resultado sea incorrecto 1 0 0 0 0 0 1 1 1 1 + 1 1 0 0 0 1 1 0 1 0 1 0 0 1 0 0 1 –125 –58 –183 (min = –2 = 128) 7 Overflow!! El resultado debe ser negativo Carry!! Se descarta El sistema de numeración binario 74 37 Suma en complemento a 2 Si los dos valores sumados tienen distinto signo es imposible que ocurra un desbordamiento Cuando el valor absoluto del número positivo es mayor que el del negativo puede aparecer un acarreo, pero se descarta y el resultado es correcto 0 0 1 1 1 0 0 1 1 1 1 1 + 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 57 –29 28 Carry!! Se descarta y el resultado es correcto El sistema de numeración binario 75 Resta en complemento a 2 Para restar dos números se calcula el complemento a 2 del número restado y se suman, descartando cualquiera acarreo que pueda aparecer 57 – 29 = 57 + (– 29) = 28 0 0 1 1 1 0 0 1 1 1 1 1 + 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 57 –29 28 Carry!! Se descarta y el resultado es correcto El sistema de numeración binario 76 38 Sumas o restas en cadena Para sumar o restar varios números aplicamos la propiedad asociativa, es decir, sumamos o restamos los números de dos en dos 68 + 27 + 14 + 18 = ( (68 + 27) + 14) + 18 = 127 0 + 0 0 + 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1 1 0 0 1 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 0 1 1 0 1 0 1 68 27 95 14 109 18 127 El sistema de numeración binario 77 Multiplicación en complemento a 2 La suma directa es el método más simple: sumar el multiplicando tantas veces como el multiplicador La desventaja de este método es que puede llegar a ser muy lento si el multiplicador es muy grande El método más común es el de los productos parciales Se multiplica el multiplicando por cada bit del multiplicador Cada producto parcial se desplaza un bit a la izquierda La suma de los productos parciales nos da el resultado El sistema de numeración binario 78 39 Multiplicación en complemento a 2 El signo del resultado depende de los signos de los números multiplicados Si son del mismo signo, el resultado es positivo Si son de distinto signo, el resultado es negativo Después de comprobar los signos, los números a multiplicar deben ser pasados a binario real Es bastante posible que el resultado tenga más bits que la representación de los operandos 3x3=9 11 x 11 = 1001 El sistema de numeración binario 79 Multiplicación en complemento a 2 Ejemplo: 83 X –59 = –4897 Los números tienen distinto signo, luego el resultado será un número negativo 83 = 01010011 –59 = 11000101 Pasamos los números a binario real Ignoramos el bit de signo del número positivo Deshacemos el complemento a 2 del número negativo y luego ignoramos el bit de signo 83 = 01010011 –59 = 11000101 El sistema de numeración binario 59 = 00111011 80 40 Multiplicación en complemento a 2 Realizamos la multiplicación ignorando los bits de signo x + + 1 + 1 1 0 + 1 1 1 0 0 0 0 1 0 1 + 1 1 0 0 0 1 0 1 1 1 1 0 0 1 0 0 1 0 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 0 0 0 1 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1 1 0 0 1 0 0 1 0 1 1 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 El sistema de numeración binario 81 Multiplicación en complemento a 2 Multiplicando números de 8 bits hemos obtenido un resultado de 13 bits Supondremos que el resultado tiene 16 bits Será importante recordar esto para diseñar multiplicadores Dado que hemos multiplicado dos números naturales, el bit de signo debe ser positivo o habrá habido un desbordamiento 0001001100100001 Una vez obtenido el resultado, y dado que habíamos determinado que éste era negativo, calculamos el complemento a 2 del mismo 0001001100100001 El sistema de numeración binario 1110110011011111 82 41 División en complemento a 2 El esquema básico de división usado en los ordenadores está basado en la resta Dado que las restas en complemento a 2 son sumas, la división puede realizarse con circuitos sumadores El signo del resultado depende de los signos de los dos operandos de la división Si son del mismo signo, el resultado es positivo Si son de distinto signo, el resultado es negativo Después de comprobar los signos, los números a dividir deben ser pasados a binario real El sistema de numeración binario 83 División en complemento a 2 Ejemplo: 100 / 25 = 4 Los números tienen el mismo signo, luego el resultado será un número positivo 100 = 01100100 25 = 00011001 Para considerar estos dos números positivos como representados en binario real simplemente debemos ignorar el bit de signo El valor inicial del cociente es cero C=0 El sistema de numeración binario 84 42 División en complemento a 2 Restamos el divisor del dividendo para obtener el primer resto parcial y sumamos uno al cociente 01100100 – 00011001 01100100 + 11100111 = 101001011 C=C+1=0+1=1 Si el resto parcial es cero o negativo, damos la división por finalizada Si el resto parcial es positivo, repetimos el proceso, restando el divisor del resto parcial y volviendo a sumar uno al cociente El sistema de numeración binario 85 División en complemento a 2 Segunda iteración: 01001011 – 00011001 01001011 + 11100111 = 100110010 C = C + 1 = 1 + 1 = 10 Tercera iteración: 00110010 – 00011001 00110010 + 11100111 = 100011001 C = C + 1 = 10 + 1 = 11 El sistema de numeración binario 86 43 División en complemento a 2 Cuarta iteración: 00011001 – 00011001 00011001 + 11100111 = 100000000 C = C + 1 = 11 + 1 = 100 El resto parcial es cero, por lo que la división termina Sólo queda asegurarse de que el bit de signo es el correcto, en este caso, signo positivo C = 100 7 bits magnitud 1 bit de signo positivo C = 0000100 C = 00000100 El sistema de numeración binario 87 Estructura del tema Introducción Sistemas de numeración El sistema decimal El sistema binario Los sistemas octal y hexadecimal Aritmética binaria Operaciones básicas Operaciones con números enteros ▫ Signo-magnitud ▫ Complemento a 1 ▫ Complemento a 2 Formato de representación en coma flotante Resumen y bibliografía El sistema de numeración binario 88 44 Números en coma fija Los números en coma fija son aquellos números en los que la coma fraccionaria tiene una posición fija Por ejemplo, si tenemos números de 8 bits podemos dedicar 5 bits a la parte entera y 3 a la fraccionaria parte entera parte fraccionaria Esto supone una severa limitación No podemos usar más de 5 bits para la parte entera aunque la fraccionaria sea cero No podemos usar más de 3 bits para la parte fraccionaria aunque la entera sea cero El sistema de numeración binario 89 Números en coma flotante El sistema de numeración en coma flotante está basado en la notación científica que se utiliza para representar números muy grandes o muy pequeños Un número en coma flotante tiene tres partes: Signo: indica si el número es positivo o negativo Mantisa: representa la magnitud del número Exponente: indica el desplazamiento de la coma fraccionaria +/– Mantisa x Base El sistema de numeración binario exponente 90 45 Números en coma flotante Los números decimales en coma flotante se normalizan, desplazando la coma fraccionaria de manera que la parte entera del número siempre valga cero 241506800 = 0’2415068 x 109 No es necesario representar la base del número, ya que está implícita en el formato Dado que la parte entera de un número normalizado siempre es cero, tampoco es necesario representarla signo: mantisa: exponente: + 2415068 9 El sistema de numeración binario 91 Números binarios en coma flotante El formato utilizado para la representación de números binarios en coma flotante está definido por el estándar 514-1985 ANSI/IEEE Nos centraremos en el formato de simple precisión, que utiliza 32 bits para la representación signo 1 bit exponente 8 bits mantisa 23 bits Existen otros formatos similares pero con distinto número de bits, como el de doble precisión (64 bits) El sistema de numeración binario 92 46 Mantisa en simple precisión La magnitud de un número binario se almacena en la mantisa de forma normalizada 0’0000101 0’101 x 2 –4 La forma normalizada siempre tiene un 1 en la posición más a la izquierda, por lo que no hay que almacenarlo, está implícito en la representación Incluso podemos aprovechar otro bit si normalizamos el número de manera que el 1 más a la izquierda esté en la parte entera 0’0000101 0’101 x 2 1’01 x 2 –4 –5 El sistema de numeración binario 93 Exponente en simple precisión Para simplificar el formato, sería interesante evitar la necesidad de un bit de signo adicional para representar el exponente Por este motivo, el exponente se representa usando un formato denominado en exceso, que consiste en sumar un desplazamiento al valor real del número En los formatos de exponente en coma flotante, este desplazamiento se calcula restando 1 al entero más grande que se pueda representar y luego dividiendo por 2 Si utilizamos 8 bits para representar el exponente, hay 28 combinaciones posibles, desde 0 hasta 255 El desplazamiento será (255 – 1) / 2 = 127 El sistema de numeración binario 94 47 Exponente en simple precisión El formato de simple precisión tiene un exponente de 8 bits en formato exceso 127 Este formato se utiliza para representar exponentes con valores entre –126 y 127 exponente = –126 –126 + 127 = 1 00000001 exponente = –125 –125 + 127 = 2 00000010 … exponente = 0 0 + 127 = 127 01111111 exponente = 1 1 + 127 = 128 10000000 … exponente = exponente = 126 126 + 127 = 253 11111101 127 127 + 127 = 254 11111110 El sistema de numeración binario 95 Casos particulares en simple precisión El valor –127 (00000000) del exponente se reserva para representar dos casos especiales Si la mantisa también es cero se está representando el cero Si la mantisa es distinta de cero se trata de un número no normalizado, es decir, supondremos que el bit implícito de la parte entera no es 1 sino 0, y el exponente es –126 El valor 128 (11111111) del exponente se reserva para representar dos casos especiales Si la mantisa es cero se está representando el infinito Si la mantisa es distinta de cero se está representando el resultado de una operación inválida, es decir, el valor no es un número (NaN – Not a Number) El sistema de numeración binario 96 48 Ejemplos en simple precisión Utilizaremos como ejemplo el número +1011010010001 Se trata de un número positivo, por lo que el bit de signo será un 0 El siguiente paso consiste en normalizar el número 1011010010001 1’011010010001 x 2 12 011010010001 Esto nos permite calcular el valor de la mantisa mantisa El sistema de numeración binario 97 Ejemplos en simple precisión Ahora falta por calcular el valor del exponente 12 exponente 12 + 127 = 139 exponente 10001011 exponente Con esta información podemos representar el número 1 bit 8 bits 23 bits 0 10001011 01101001000100000000000 El sistema de numeración binario 98 49 Ejemplos en simple precisión Ahora haremos un ejemplo en sentido inverso usando el número 1 10010001 10001110001000000000000 Dado que el bit de signo es 1, el número es negativo La mantisa nos proporciona la magnitud del número 1’10001110001 El sistema de numeración binario 99 Ejemplos en simple precisión El valor del exponente se calcula de la siguiente forma: 10010001 exponente 145 exponente 145 – 127 = 18 exponente Con esta información obtenemos el número –1’10001110001 x 218 –1100011100010000000 El sistema de numeración binario 100 50 Ventajas de la coma flotante El formato en coma flotante se usa para representar valores muy grandes (exponente positivo) o valores muy pequeños (exponente negativo) El formato en coma flotante de simple precisión permite representar números de 128 bits con solo 32 El formato es flexible: se pude dedicar cualquier cantidad de bits a la parte entera o a la parte fraccionaria según convenga El sistema de numeración binario 101 Suma y resta en coma flotante La suma y la resta se llevan a cabo con las reglas habituales, pero los dos exponentes deben ser iguales Antes de operar hay que igualar los exponentes Se desplaza a la derecha la mantisa del número con menor exponente Cada posición desplazada a la derecha implica incrementar en uno el valor del exponente El desplazamiento se repite hasta que los dos números tengan el mismo valor en el exponente El sistema de numeración binario 102 51 Suma en coma flotante En la suma existe la posibilidad de desbordamiento a overflow) del valor de la mantisa infinito ( El desbordamiento se debe corregir desplazando la mantisa una posición a la derecha y sumando uno al exponente Es importante controlar la posibilidad de que el exponente se desborde al realizar esta operación, ya que obtendríamos un número no representable El sistema de numeración binario 103 Resta en coma flotante En la resta existe la posibilidad de obtener un número con uno o varios ceros en los bits más significativos, lo que obligaría a normalizar el resultado La normalización se realiza desplazando la mantisa a la izquierda y restando uno al exponente por cada posición desplazada Es importante controlar la posibilidad de que el underflow) exponente se desborde a cero ( Una posible solución sería usar el formato no normalizado Si este formato tampoco es suficiente, entonces el número no es representable El sistema de numeración binario 104 52 Multiplicación en coma flotante La multiplicación es más sencilla porque no es necesario que los exponentes sean iguales Las mantisas se multiplican como enteros en coma fija Los exponentes se suman Si cualquiera de los operandos es cero, el resultado también Existe la posibilidad de que sea necesario normalizar el resultado de la multiplicación También es posible que se produzca un desbordamiento a cero o a infinito del exponente, por lo que hay que controlar que el resultado sea representable El sistema de numeración binario 105 División en coma flotante La división consiste en dividir las mantisas y restar al exponente del dividendo el exponente del divisor Si el dividendo es cero el resultado es cero Si el divisor es cero se considera desbordamiento Si el dividendo y el divisor son cero, el resultado se identifica como un número desconocido Existe la posibilidad de que sea necesario normalizar el resultado de la división También es posible que se produzca un desbordamiento a cero o a infinito del exponente, por lo que hay que controlar que el resultado sea representable El sistema de numeración binario 106 53 Estructura del tema Introducción Sistemas de numeración El sistema decimal El sistema binario Los sistemas octal y hexadecimal Aritmética binaria Operaciones básicas Operaciones con números enteros ▫ Signo-magnitud ▫ Complemento a 1 ▫ Complemento a 2 Formato de representación en coma flotante Resumen y bibliografía El sistema de numeración binario 107 Resumen El sistema de numeración binario es un sistema posicional en base 2 que tiene dos dígitos distintos, también llamados bits: el 0 y el 1 La comprensión de las operaciones básicas de la aritmética binaria es importante para el diseño de sistemas digitales Existen varios formatos de representación de números negativos, pero el complemento a 2 es el más utilizado por los ordenadores actuales El formato en coma flotante permite la representación de números muy grandes o muy pequeños El sistema de numeración binario 108 54 Bibliografía Fundamentos de Sistemas Digitales (7ª edición) Capítulo 2 Thomas L. Floyd Prentice Hall, 2000 http://cwx.prenhall.com/bookbind/pubbooks/floyd3/chapter2 Principios de Diseño Digital Capítulo 2 Daniel D. Gajski Prentice Hall, 1997 El sistema de numeración binario 109 55