Capítulo I. Representación de la Información. 1.1.- Introducción. El objetivo del presente apunte es mostrar algunas de las diferentes formas que han sido ideadas para representar información. En particular, nos remitiremos a formas de escribir números debido a que muchas de las aplicaciones de los computadores deben manejarlos. Además, veremos que otros símbolos de interés, tales como letras y elementos de puntuación pueden ser representados como números. Los números romanos son un esquema de control basado en las quinas (V) y decenas (X). Los romanos tenían símbolos para el 1, 5, 10, 50, 100, 500, 1000, 5000, 10000 y 100000, pero no para números más grandes. Para expresar números como 1.000.000 es necesario escribir el número 100.000 diez veces; es así que para expresar el número de habitantes de un país (aún siendo pequeño) se requerirían varias líneas para anotar la cantidad. En nuestro moderno sistema numérico tenemos lo que se conoce como un "Sistema Numérico Posicional", en el cual el significado de un símbolo cambia, dependiendo de la posición en que se encuentre dentro del número. Es así como el número 1232 significa: 2 * 100 + 3 * 101 + 2 * 102 + 1* 103 Nosotros utilizamos 10 diferentes símbolos 0... 9 con los cuales, mediante el valor posicional que cada uno tenga asignado, podemos representar cualquier número que deseemos. A diferencia de los Romanos, nosotros no necesitamos más que estos 10 símbolos. Los Babilonios utilizaban un método similar, el que fue olvidado por las civilizaciones del Mediterráneo y no fue sino hasta alrededor del año 1200 que el concepto fue reintroducido en Occidente, a través de la India por los árabes, dando así origen a lo que hoy se conoce como Sistema Arábico. El sistema numérico que utilizamos basado en 10 dígitos es conocido como Sistema Decimal y, aparte de que nosotros tengamos 10 dedos, el Sistema Decimal no posee ninguna otra característica que lo haga particularmente atractivo. Se han hecho esfuerzos por introducir un sistema numérico duodecimal (base 12) basándose en el hecho que tal sistema tendría la ventaja de que la base puede ser dividida (con resto cero) por muchos más números que la base 10. La posibilidad de que un sistema como éste sea adoptado es realmente remota, pero podría resultar atractivo. La introducción de los computadores digitales y la tecnología en la que ellos están basados ha despertado, recientemente, gran interés por sistemas numéricos posicionales en los cuales el "peso" asignado a cada sucesor izquierdo en un número no es 10 veces más grande que su vecino derecho más próximo. El factor en el que aumenta el peso de un dígito a medida que éste se mueve hacia la izquierda en un número es la "base" o la "raíz". Es así como en la actualidad tienen gran importancia los sistemas numéricos de base 2, 8 y 16. En lo que sigue vamos a estudiar algunos de los conceptos más importantes de los sistemas numéricos, para continuar con el estudio de métodos para conversión entre las distintas bases; veremos también elementos de aritmética en las bases más usadas (distintas de 10) para finalizar con la descripción de los códigos más usados en computadores, para representar información tanto numérica como alfanumérica. Capítulo I. Representación de la Información 1.2 Sistemas Numéricos. Un sistema numérico consiste en un set ordenado de símbolos, llamados dígitos, con relaciones definidas por: suma (+), sustracciíon (-), multiplicación (*) y división (:). La base de un sistema numérico es el número total de dígitos permitidos en el sistema numérico. En la tabla 1.1 se da una lista de varios sistemas numéricos comunes. Se dice que un número en un sistema dado (representado en notación punto fijo) tiene una parte entera y una parte fraccionaria, esta última, separada por un punto. En algunos casos la parte entera o la parte fraccionaria no existe. Base 10 Ejemplos: Dígitos 0, 1, 2, 3, 4 ......9 16 0, 1, 2,......9, A, B, C, D, E, F 8 0, 1, 2, 3, 4 ......7 5 0, 1, 2, 3, 4 2 0, 1 123, en base 10, representado como 12310; 30, en base 6 representado por 306 A continuación estudiaremos dos formas de escribir un número en un sistema numérico: la notación juxta posicional y la representación polinomial. 1.2.1.- Notación Juxta-posicional. Supóngase que Ud. solicita un préstamo a un banco por la cantidad de ciento veintitrés pesos y treinta centavos. El cheque que Ud. recibe indica el monto 123,30. Al escribir este número se ha usado la notación juxta posicional. El cheque podría ser cambiado por 1 billete de 100 pesos, 2 monedas de 10 pesos, 3 monedas de 1 peso y 3 de 10 centavos (si existieran). Por lo tanto, la posición de cada dígito nos indica el peso relativo o importancia de él. En general, un número N en notación juxta-posicional se escribe como sigue: N = ( an −1an − 2 ...........a1a0 . a−1a−2 ..........a− m )r r = base a = n = m = a = a-n = dígito número de dígitos enteros número de dígitos fraccionarios dígito más significativo dígito menos significativo Entonces el número total de dígitos usados en el sistema numérico es igual a la base r del sistema numérico, donde 0 ≤ ai ≤ r − 1 y -m ≤ i ≤ n-1 1.2.2.- Representación Polinomial. El préstamo de 123,3010 pesos puede ser escrito en notación polinomial como: Curso Electrotecnia VPG/1.2 Capítulo I. Representación de la Información N = 123,3010 N = 1∗100 + 2 ∗10 + 3 ∗1 + 3 ∗ 0.1 + 0 ∗ 0.01 N = 1∗102 + 2 ∗101 + 3 ∗100 + 3 ∗10−10 ∗10−2 N = 123,3010 Note que cada dígito está ubicado en una posición que le da un cierto "peso" y que dicho peso de cada posición es una potencia de la base, en este caso 10. En general, cualquier número N puede ser escrito como un polinomio de la forma: N= n −1 ∑ ar i i =− m donde cada símbolo fue definido anteriormente. Para el caso: a 2 = 1; a1 = 2; a0 = 3; a−1 = 3; a = 10; r = 0 y ai = 0 para i ≥ 3 i ≤ −2 1.2.3.- Ejemplos de Sistemas numéricos.En la tabla 1.2 se listan varios números escritos en algunos de los sistemas numéricos de la tabla 1.1. Note por ejemplo que: N = 1410 = 11102 = 1123 = 324 = 168 = E16 Todos los números en la tabla están escritos en notación juxta posicional. Para el sistema hexadecimal debemos tener 16 dígitos, estos son: 0, 1, 2,...... , 9, A, B, C, D, E, F que son los usados en la literatura especializada. Tabla 1.2 r = 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Curso Electrotecnia Ejemplos de sistemas numéricos r=2 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 10010 10011 10100 10101 10010 r=3 0 1 2 10 11 12 20 21 22 100 101 102 110 111 112 120 121 122 200 201 202 210 211 r=4 0 1 2 3 10 11 12 13 20 21 22 23 30 31 32 33 100 101 102 103 110 111 112 r=8 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 r = 16 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 VPG/1.3 Capítulo I. Representación de la Información Una tabla como la 1.2 puede ser usada para conversión de bases, esto es, para convertir números de una base a otra. Sin embargo, nosotros vamos a estudiar más adelante otros métodos de conversión, los cuales eliminan la necesidad de utilizar tablas para realizar la conversión. El sistema de números binarios (r = 2) requiere sólo 2 bits, 0 y 1. Este sistema es ideal para ser usado en computadores digitales, los cuales son construidos con dispositivos bi-estables, los que en general están encendido o apagado. Uno de estos estados es llamado 1 y el otro 0. La conexión de una serie de estos dispositivos bi-estables forman lo que se conoce con el nombre de registro, como se muestra en la figura 1.1. El registro de 5 bits mostrado aquí contiene el número: 101102 = 2210 1 0 1 1 1 Fig. 1.1 : Registro de 5 bits Según se indica en la tabla 1.2, el tamaño de los registros en los computadores va desde 1 bit a 64, existiendo aún mayores. 1.2.4.- Números con signo. Los computadores digitales usan los números binarios para realizar los cálculos preescritos por el programador. Para diferenciar entre datos positivos y negativos la máquina emplea convenciones especiales de signo, además del sistema numérico binario mostrado en la tabla 1.3. La forma para estos números con signo se resume a continuación. El número con signo N puede ser escrito en una de las siguientes: Juxta posicional Signo-Magnitud : : N = + ( an −1............a0 . a−1...............an ) N = ( San −1..........a0 . a−1...........a− m ) donde S = 0 si N es positivo y S = r-1 si N es negativo. Ejemplo 1: N = -1310 N = -11012 (ver tabla 1.2) N = 111012SM El subíndice SM indica el uso de sistema binario signo - magnitud. 1.2.5.- Notación en punto Flotante. Ingenieros y científicos frecuentemente hacen cálculos matemáticos en notación científica o punto flotante. Por ejemplo, un millón seiscientos cincuenta mil es escrito como: N = 1.650.000 = .165 x 107 En una notación más completa: N = 1.650.00010 = .16510 x 10710 En notación punto flotante todos los números son escritos como una fracción de veces de la base elevado a una potencia. En general, si: N = + ( an −1..........a0 .a− i ...............a− m )r Entonces N puede ser escrito en una forma más compacta: Curso Electrotecnia N = F ⋅rE VPG/1.4 Capítulo I. Representación de la Información donde: F = + ( an −1...............a− m )r y E = + ( bk − i ..............b0 )r En otras palabras, la parte fraccionaria F es multiplicada por la base r elevada al exponente E. Si S(f) es el símbolo del signo para F y S(e) el símbolo del signo para E, entonces una notación en punto flotante reducida es : N = ( S ( f ) S ( e ) , bk −1................, an −1.......................a− m )r donde S(f) y S(e) son 0 para positivo y 1 para negativo. Suponga que se desea escribir el número: N = 1.650.00010 en notación punto flotante con n + m = 5 y K = 3. Bajo estas condiciones F y E son: Ejemplo 2. F = + .1650010 Y N puede ser escrito como: Ejemplo 3 . E = + 007. 10 N = (00,007,16500) 10 ,que es su notación en punto flotante. Ahora vamos a escribir N = - (101101 . 101)2 en punto flotante con n + m = 10 y k = 6. Entonces: Luego: F = (.1011011010) 2 E = + 6. 10 = + 0001102 (ver tabla 1.2) N = (10,000110,1011011010) 2 1.3. Aritmética en Sistemas numéricos posicionales. Las reglas de la aritmética son las mismas en todos los sistemas numéricos de posiciones de valor relativo. Por ello, basta sólo recordar las reglas correspondientes de la aritmética decimal para poder efectuar operaciones aritméticas con números de cualquier otra base. 1.3.1. Suma. Cuenta y acarreo. Un procedimiento basado en el principio de cuenta y acarreo, válido para cualquier sistema posicional, tiene los siguientes tres pasos: 1) Sume los dígitos en la columna; 2) Si la base no es igualada ni excedida, registre la suma; 3) Si la base es igualada o excedida, divida la suma por la base (en base 10), registre el residuo y acarree el cuociente a la siguiente columna. En general, este procedimiento es útil para bases mayores que 2. a) Suma Hexadecimal. Trabajar con símbolos alfanuméricos (números y letras) parece extraño al principio dado que resultados que nos son familiares en la suma decimal tienen un significado distinto en hexadecimal. Mientras 4 + 5 = 9 tanto en decimal como en hexadecimal, 7 + 8 = 15 (decimal). Pero 7 + 8 = F (hexadecimal). Cada vez que la suma de dos dígitos sobrepasa a F (el símbolo de mayor valor) se genera el acarreo de un 1 hacia la posición superior: Curso Electrotecnia VPG/1.5 Capítulo I. Representación de la Información Ejemplo 4: 1 0 C 4 C F 2 D B 6 1 + 3 4 1 2 3 F 0 1 3 + 1 1 2 + 1 4 B 5 3 8 E D acarreos F 7 6 suma En el primer ejemplo 4 + 2 = 6, C + F(Hex) = 12 + 15(Dec) = 27 (Dec) = 16+11(Dec) = 1B (Hex) = B con acarreo de un 1. C + 1 = D (directamente en Hex.) y 3 + 1 = 4. Ejemplo 5: 1 1 9 + 9 1 2 2 con acarreo de 1 1 6 + 1 8 b) C 9 1 5 5 con acarreo de 1 + 1 A E F A A 8 1 + 1 1 1 8 F 9 7 D 4 4 C 6 3 E 3 Suma Octal. 1 + 1 1 7 2 2 3 5 0 2 2 4 3 + 2 5 1 0 3 4 1 4 4 1 1 4 4 0 + 1 1 1 7 1 1 6 6 5 acarreos 7 7 6 suma En el primer ejemplo, comenzando por la derecha, 2 + 2 = 4, 3 + 5 = 8 (Dec.), pero 8 decimal es 10 octal; así el valor correcto es 0 con acarreo de 1 en octal. c) Suma Binaria. En el sistema binario sólo hay dos símbolos: 0 y 1. Las reglas para la suma binaria son las siguientes: 0 0 1 1 + + + + 0 1 0 1 = = = = 0 1 1 1 0 Cuando la suma de dos dígitos excede los símbolos numéricos disponibles de la notación, se lleva un uno a la posición de dígitos inmediatamente superior. Por lo tanto, al sumar 1+1 en la notación binaria se excede el límite de la cuenta (ya que no hay otro símbolo disponible) y en consecuencia el resultado es 0 con acarreo de 1 a la posición de dígito inmediatamente superior. Curso Electrotecnia VPG/1.6 Capítulo I. Representación de la Información Ejemplo 6: 1 1 + 1 1 0 1 0 0 1 1 0 1 0 1 1 0 Acarreo Suma 1 1 1 1 1 1 + 1 0 0 0 1 1 1 1 1 0 1 0 1 1 0 Ejemplo 7 Acarreo Suma En el ejemplo 7, en la tercera columna (de derecha a izquierda) se tenían dos bits unos y un bit uno de acarreo que debieron ser sumados. Esta se realizó como sigue: 1 + 1 + 1 = (1 + 1) + 1 ⇒ 1 0 + 0 1 ⇒ 1 1 Es decir, el bit de suma fue 1 y el bit de acarreo fue 1. Si se deben sumar una gran cantidad de números, la suma se realiza más fácilmente tomando los números de a pares, como se muestra en el ejemplo 8: Ejemplo 8. 1 1 0 + 0 1 1 1 + 1 1 1 1 0 1 0 1 1 0 0 1 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 + 0 0 1 1 Suma + 1 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 0 0 1 1 1 0 0 0 0 Un procedimiento nemotécnico para realizar la suma anterior es el siguiente: 1. Si el número de "unos" en la columna par, entonces el resultado de dicha columna es "0 por cada par de unos se acarrea un "1" a la columna siguiente. 2. Si el número de unos es impar, entonces el resultado es "1" y por cada par de unos se acarrea un "1". 1.3.2. Suma por tablas. Nuestra habilidad para manejar la aritmética en base 10 depende de un conjunto de reglas básicas tanto para sumar como para multiplicar, las que son guardadas en memoria. Estas operaciones llegan a ser tan familiares que tendemos a olvidar la importancia de estas tablas, particularmente la tabla de adición. Al realizar operaciones aritméticas en alguna otra base también se requiere una cierta familiarización con los símbolos de esas tablas para esa base. Vemos en la figura 2.2 las tablas de suma y multiplicación para las bases 2 y 5. Curso Electrotecnia VPG/1.7 Capítulo I. Representación de la Información Todas las reglas de la aritmética, tales como el acarreo, se aplican análogamente para bases distinta a la base 10. + 0 1 0 0 1 1 1 1 ∗ 0 1 0 0 0 1 0 1 + 0 1 2 3 4 0 0 1 2 3 4 1 1 2 3 4 10 2 2 3 4 10 11 3 3 4 10 11 12 ∗ 0 1 2 3 4 4 4 10 11 12 13 Base 2 0 0 0 0 0 0 1 0 1 2 3 4 2 0 2 4 11 13 3 0 3 11 14 22 4 0 4 13 22 31 Base 5 (Nota: cuando el resultado tiene dos dígitos, el más significativo puede guardarse como carry). Figura 1.2 Tablas de adición y multiplicación. 1.3.3. Sustracción. Procedimiento para sistemas posicionales: 1) Para cada columna, sustraiga el sustraendo del minuendo (si el sustraendo es mayor que el minuendo, pida "prestada" una potencia de la base desde la siguiente columna y luego sustraiga). 2) Registre la diferencia. Ejemplo 9: Restar a) (4)3 - 2 1 23410 de 43210 10 (3)2 3 9 10 2 4 8 b) 35210 de 65010 Préstamo Resta 6 3 3 (6)5 5 0 10 0 2 6 Préstamo Resta c) Si en la sustracción binaria existe la necesidad de un préstamo y el dígito siguiente a la izquierda del minuendo es 1, se cambia dicho 1 a 0 y la sustracción continúa de manera usual. Sin embargo, si el dígito siguiente a la izquierda del minuendo es 0, éste es cambiado a 1, así como cada dígito sucesivo a la izquierda que sea igual a cero. El primer dígito del minuendo que sea igual a 1 es cambiado a 0 y la sustracción continúa. Ejemplo 10: restar 010111 de 101000 (1)0 - 0 0 Curso Electrotecnia 2 0 1 1 (1)0 (0)1 (0)1 0 0 0 0 1 1 2 0 1 1 Préstamo Resta VPG/1.8 Capítulo I. Representación de la Información 1.3.4.- Resta por tablas. La sustracción y división pueden también efectuarse con el uso de las tablas de adición y multiplicación. Las tablas de adición contestan a la pregunta a + b = ? para a y b dígtos quinarios, pero también puede responderse a la pregunta a + ? = c. Por ejemplo, para encontrar 11 - 3 en aritmética quinaria, consideramos el problema 3 + ? = 11. Encontramos la respuesta fijándonos en la columna izquierda hasta encontrar el numeral 3, entonces recorriendo la hilera encontramos el numeral 11. El numeral que nombra al número que debe ser sumado a 3 para obtener 11 está en la parte superior de esta columna. Por lo tanto, 11 - 3 = 3. Análogamente 12 - 4 = 3; 10 - 2 = 3; 11 - 2 =4 , etc... Restar 2341 de 4332 en aritmética quinaria. Ejemplo 11: Procedimiento. 1a. columna: 2a. columna: 3a. columna: 4a. columna: 1 + ? = 2 , 1 + 1 = 2, Escribimos 1. Pedimos 1, entonces 4 + ? = 13 , 4 + 4 = 13. Escribimos 4. Pedimos 1, entonces 3 + ? = 12 , 3 + 4 = 12. Escribimos 4. 2 + ? = 3 , 2 + 1 = 3. Escribimos 1. Prestamo - (4)3 2 1 (3)2 3 4 3 4 4 2 1 1 Resta 1.3.5. Multiplicación Binaria. La multiplicación binaria se realiza de la misma forma que la multiplicación decimal, con la excepción que las operaciones multiplicativas binarias son más simples. Ejemplo 12: 1 1 0 0 1 1 1 0 1 0 0 0 0 1 1 Ejemplo 13: 1 1 0 1 1 1 1 x 1 0 1 1 1 0 0 1 1 0 1 1 1 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 1 0 x 1 0 1 0 Note que existe un producto parcial por cada bit multiplicador. Este procedimiento puede ser realizado con más eficiencia si se desplaza un lugar a la izquierda en vez de multiplicar un bit 0. Uno puede ver cual de los procedimientos mencionados es el que más le acomoda. 1.3.6. División Binaria. La división binaria es efectuada del mismo modo que la división decimal. Sin embargo, el procedimiento es sencillo, ya que existen sólo dos valores posibles. Curso Electrotecnia VPG/1.9 Capítulo I. Representación de la Información Ejemplo 13: Dividir 11710 por 910 en binario. 0 1 1 (1) 0 1 0 0 1 1 0 1 1 0 0 0 0 1 0 0 1 1 0 1 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 : 1 0 0 1 = 1 1 0 1 Ejemplo 14: 1 1 1 0 1 0 1 : 1 1 1 = 1 0 0 0 1 1 1 0 0 0 0 1 0 1 1.4. Conversión Entre Bases. En ocasiones, sobre todo cuando se trabaja con mini y microcomputadores, resulta necesario determinar el equivalente de un número sobre otra base diferente de la cual está expresado. De la gran cantidad de métodos de conversión, veremos sólo aquellos de mayor utilidad. 1.4.1. Métodos lentos a) Desarrollo en Serie de Potencias Este método es sugerido por la ecuación: n −1 ∑ ar N= i =− m que también se puede escribir como: i i N = an −1 • r n −1 + ........ + a0 • r 0 + a−1r −1 + ......... + a− m r − m Donde a son los coeficientes y r la base. En la práctica, los términos de la base están expresados en una base, digamos r = a; entonces, para realizar la conversión a otra base, r = b, cada factor, de cada término es convertido a la otra base, para luego ser evaluado usando aritmética de base b. Los siguientes ejemplos ilustran la técnica: Ejemplo 15: convertir 1416 a base 2 1416 = (116) • (1016)1 + (416) • (1016)0 , pero, 1 116 = 12 , 1416 = (12 ) • (100002 ) + (1002) • (100002 ) 1016 = 100002 y 416 = 1002 ⇒ 0 1416 = (12 ) • (100002 ) + (1002) • (12 ) 1416 = 100002 + 1002 1416 = 101002 Es importante hacer notar que tanto las sumas como las multiplicaciones anteriores son realizadas en base 2. Curso Electrotecnia VPG/1.10 Capítulo I. Representación de la Información Convertir 1416 a base 10. Ejemplo 16: 1416 = 116 • (1016)1 + 416 • (1016)0 (1016) = 1610 , 416 = 410 ⇒ pero 116 = 110 , 1416 = 110 • (1610 )1 + 410 • (1610)º 1416 = 1610 + 410 1416 = 2010 Convertir 248 a base 10. Ejemplo 17: 248 = 28 • (108)1 + 4 • (108)0 = 2 • 8 + 4 • 1 = 2010 Ejemplo 18: Convertir 248 a base 2 248 = 28 • (108)1 + 48 • (108)0 pero: 28 = (10)2 ; 1 108 = (1000)2 ; 48 = (100)2 0 248 = (10)2 • (10002) + (100)2 • (10002 ) = 102 • 10002 + 1002 • 1 248 = 100002 + 1002 = 101002 Ejemplo 19 : Convertir 101002 a base 10 101002 = 1 • 24 + 0 • 23 + 1 • 22 + 0 • 21 + 0 • 20 101002 = 24 + 0 + 22 + 0 + 0 101002 = 16 + 0 + 4 + 0 + 0 101002 = 2010 Ejemplo 20: Convertir AF3.1516 a base 10 A = 1010 F = 1510 2 3 = 310 1 1 = 110 0 5 = 510 -1 AF3.1516 = 10 • 16 + 15 • 16 + 3 • 16 + 1 • 16 + 5 • 16-2 AF3.1516 = 2560 + 240 + 3 + 0.0625 + 0.01953 AF3.1516 = 2560 + 240 + 3 + 0.0625 + 0.01953 AF3.1516 = 2803.0820310 Ejemplo 21: Convertir 1603.517 a base 10 1603.517 = 1 • 73 + 6 • 72 + 0 • 71 +3 • 70 +5 • 7-1 +1 • 7-2 1603.517 = 343 + 294 + 3 + 0.714285 + 0.020408 1603.517 = 640.73469310 Considerando el hecho que las operaciones aritméticas que deben realizarse en este método son llevadas a cabo en la base a la que se está convirtiendo; la sustitución de potencias es un método útil para convertir desde cualquier base a base 10, dada nuestra familiaridad con la aritmética de esta base. b) Método de la División para Números Enteros Suponga que un número está expresado en una base s. Este puede ser convertido a base r, realizando la secuencia de divisiones que se muestran en la fig. 1.3, llevadas a cabo en base s. Los digitos Ai son los restos de cada división de tal forma que Ai < r. Curso Electrotecnia VPG/1.11 Capítulo I. Representación de la Información Demostración. Alternativamente, la división puede ser escrita como: Restos N = r • N1 + A0 N1 = r • N2 + A1 N2 = r • N3 + A2 ............. ............. ............. Nn = r • 0 + An N : r = N1 A0 N1 : r = N2 A1 N2 : r = N3 A2 ............ ............ o como: N = r • (r • N2 + A1) + A0 2 N = r • N2 + r • A1 + A0 2 N = r • (r • N3 + A2 +r • A1) + A0 3 2 N = r • N3 + r A2 + r • A1 + A0 Nn-1 : r = Nn An-1 n n-1 N = r • An + r • An-1 + . . . . . . . . . . . r • A1 + A0 Con lo que, en notación juxtaposicional: Ejemplo 22 : N(s) = An An-1 An´2 . . . . . . . A0 (r) Ejemplo 23: Convertir 65310 a base 2 Convertir 65310 a base 5 6 5 3 1 : 2 = 3 2 6 6 5 3 3 : 5 = 1 3 3 2 6 0 : 2 = 1 6 3 1 3 0 0 : 5 = 2 6 1 6 3 1 : 2 = 8 1 2 6 : 5 = 5 5 = 1 1 1 : 2 = 4 0 5 0 : 8 5 = 0 0 0 : 2 = 2 0 1 1 : 4 2 0 1 : 2 = 1 0 0 0 : 2 = 5 5 1 : 2 = 2 2 0 : 2 = 1 Por lo tanto, 1 65310 = 101035 Ejemplo 24: Convertir el número 160610 a base 12 Utilizar p y q para los dígitos 10 y 11 1 Por lo tanto, 6 5 310 = 0101011012 0 6 0 1 6 0 : 1 2 = 1 3 1 3 3 1 : 1 2 = 1 1 1 1 1 1 : 1 2 = 0 Por lo tanto, 3 1 6 0 610 = q 1 p12 En cada uno de los ejemplos anteriores, la aritmética usada fue la de base 10. Si un número va a ser convertido de base r ( r ≠ 10) a alguna base b, la aritmética a utilizar debe ser en base r. Por esta razón el método de la división es conveniente para convertir números expresados en base 10 a cualquier otra base r, aún cuando puede utilizarse para cualquier base. Curso Electrotecnia VPG/1.12 Capítulo I. Representación de la Información c) Método de la multiplicación para números fraccionarios. Como se vio anteriormente, el método de las series de potencias es adecuado para convertir números expresados en base r a base 10, tanto para números enteros como para fraccionarios. El método de la división en cambio, adecuado para convertir números en base 10 a una base r, es aplicable sólo a números enteros. Supongamos que deseamos convertir números con parte fraccionaria de un sistema numérico a otro. Considerar el número: n 0 N = NE + NF = An • r +. . . . . . . + A0 • r + A-1 • r-1 + A-2 • r-2 +. . . donde NE y NF son las partes enteras y fraccionarias respectivamente. La base fraccionaria de una base corresponderá siempre a la parte fraccionaria de otra, por lo tanto, NE puede ser convertido con el método de la división desarrollado anteriormente y la parte fraccionaria NF convertida en forma separada como sigue: NF = A-1 • r-1 + A-2 • r-2 + A-3 • r-3 +. . . como el problema se reduce a determinar los coeficientes A-1, A-2, A-3, etc., para la base r y notando que cada uno de estos coeficientes es por sí mismo un entero, tenemos que al multiplicar por r se obtiene: r • NF = A-1 + A-2 • r-1 + A-3 • r-2 +. . . donde la parte entera de r • NF es A-1 y por tanto, A-1 = r • NF - ( A-2 + A-2 • r-1 + A-3 • r-2 + . . . . . . ) ahora, restando el ya conocido A-1 a r • NF se obtiene: r • NF – A-1 = A-2 • r-1 + A-3 • r-2 + . . . con lo que ahora estamos en condiciones de obtener A-2 usando el mismo método anterior. r • (r • NF – A-1 ) = A-2 + A-3 • r-1 + . . . por lo tanto A-2 = r • (r • NF – A-1 ) – (A-3 • r-1 + . . . ) Este proceso continúa hasta obtener tantos coeficientes como se deseen. Ejemplo 25 : Convertir el número 653.6110 a base 2. Solución a la parte fraccionaria: 2 • (0.61) = 1.22 2 • (0.22) = 0.44 2 • (0.44) = 0.88 2 • (0.88) = 1.76 2 • (0.76) = 1.52 2 • (0.52) = 1.04 2 • (0.04) = 0.08 . . . Curso Electrotecnia A-1 = 1 A-2 = 0 A-3 = 0 A-4 = 1 A-5 = 1 A-6 = 1 A-7 = 0 VPG/1.13 Capítulo I. Representación de la Información De un ejemplo anterior : 65310 = 1 0 1 0 0 0 1 1 0 12 Por lo tanto, 653.6110 = 1 0 1 0 0 0 1 1 0 1.1 0 0 1 1 1 02 d) Método de la Sustracción de Potencias. Este método es usado de preferencia para la conversión decimal a otra base r, debido a que la aritmética utilizada en la conversión se realiza en la base en que se encuentra el número. Sea N tal que: n N = An • r + An-1 • r n-1 +. . . . . . + A0 • r 0 El procedimiento consiste en los siguientes dos pasos: 1. i Sustraiga la potencia más alta de la forma Ai • r , contenida en el número y registre al valor de Ai en el dígito más significativo de la base r. ( A está en {0, 1, . . . (r-1)} ). 2. Repita el proceso de sustracción con las diferencias resultantes y potencias descendentes de r i (regitrando los A ) hasta que la diferencia resultante sea cero. Convertir 4510 a base 8. Ejemplo 26: Las tres primeras potencias de 8 son: 3 2 8 ↓ 512 8 ↓ 64 1 8 ↓ 8 0 8 ↓ 1 1 La potencia de 8 más alta contenida en 45 es 1, es decir, 8 = 8; la potencia de la forma A • r más alta contenida en 45 es 5 • 8 = 40 (6 • 8 = 48, se pasa) entonces: A1 = 5; Luego, 45 - 40 = 5. La potencia más 0 0 alta contenida en 5 es 8 = 1, con lo que 5 = 5 • 8 por tanto Ejemplo 27: A0 = 5 Luego, 5 - 5 = 0. Y entonces Convertir 4510 a base 2. Algunas potencias de 2 son: - 25 ↓ 32 - 24 2 3 ↓ ↓ 16 8 22 ↓ 4 21 20 ↓ ↓ 2 1 - 4 3 1 5 2 3 8 5 4 1 1 0 4510 = 558 5 → 1 • 2 → 1 • 23 → 1 • 22 → 1 • 20 Por lo tanto 4510 = 1011012 1.4.2. Métodos Rápidos. Los métodos rápidos son en realidad casos especiales de los métodos generales descritos en el apartado anterior y aplicables por lo tanto a casos particulares. Curso Electrotecnia VPG/1.14 Capítulo I. Representación de la Información a) Conversión por Tablas. Es el método más usado cuando se trata de números pequeños como por ejemplo del 0 al 1610 Tabla 1.2 Ejemplos de sistemas numéricos Decimal Binario Octal Hexadecimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 0 1 2 3 4 5 6 7 8 9 A B C D E F b) Agrupación de Dígitos. Utilizando alguno de los métodos anteriores puede mostrarse que: 2001.28 = 010 000 000 001.0102 Si partimos con el número en binario, agrupando los bits en unidades de a tres en ambas direcciones a partir del punto binario, para luego convertir cada grupo a octal utilizando por ejemplo la tabla del punto anterior, obtendremos lo siguiente: N = 010 000 000 001 010 ↓ ↓ ↓ ↓ ↓ 2 0 0 1 N = 2001.28 2 Esta sencilla conversión fue posible debido a que las bases están relacionadas por la expresión: 8 = 23, siendo el exponente el que sugiere la agrupación de a tres. El siguiente algoritmo generaliza esta técnica para la conversión entre dos bases cualesquiera en que una sea potencia entera de la otra. Algoritmo. ¾ Para convertir un número N desde una base r a una base s cuando s = rk y k es un entero, agrupar los dígitos del número N en base r, en unidades de k dígitos en ambas direcciones a partir del punto base y luego convertir cada grupo de k dígitos a la base s. ¾ Para convertir un número N desde la base s a la base r cuando s = rk y k es un entero, simplemente convertir cada dígito en base s a k dígitos en base r. Curso Electrotecnia VPG/1.15 Capítulo I. Representación de la Información Ejemplo 29: Convertir N = 1011011.10101112 a base 8 N = 1 011 011. 101 011 100 ↓ 1 3 Ejemplo 30: N = ↓ ↓ ↓ ↓ 3 5 3 N = 133 . 5348 4 Convertir AF.16C16 a base 2. Convertir AF.16C a base 2 A F. 1 6 C ↓ ↓ ↓ ↓ N= ↓ Convertir AF.16C a base 4 F 1 6 C A ↓ ↓ 22 1010 1111 0001 0110 1100 N = 10101111 . 000101101100 ↓ ↓ 33 01 12 N = 2233 . 011230 ↓ 30 Al no disponerse (o no saber construir) una tabla de base 4, este ejemplo puede ser resuelto pasando primero a base 2 y luego a base 4, de la siguiente forma: N = Convertir AF.16C a base 2 A F. 1 6 C ↓ ↓ ↓ ↓ ↓ 1010 1111. 0001 0110 1100 ↓ ↓ ↓ ↓ ↓ 22 33 01 12 30 N = 2233 . 011230 1.5. Complementos. Los complementos son usados en computadores digitales para simplificar la operación de resta y para manipulaciones lógicas. Hay dos tipos de complementos para cada sistema de base r: a) El complemento a r, y b) El complemento a (r -1). Para el sistema binario (r = 2); estos dos tipos de complemento reciben los nombres de: complemento a 2, y complemento a 1, respectivamente. En el caso del sistema decimal (r = 10); estos dos tipos de complemento reciben los nombres de: complemento a 10, y complemento a 9, respectivamente. 1.5.1. Complemento a r. Si se tiene un número positivo en base r con una parte entera de "n" dígitos. El complemento a r de "n" esta definido por : Curso Electrotecnia VPG/1.16 Capítulo I. Representación de la Información C(N)r = rn - N para N ≠ 0 C(N)r = 0 para N = 0 Los siguientes ejemplos numéricos podrán ayudar a clarificar la definición: Ejemplo 32.- El complemento a 10 de 5252010 es: 47480. Como el número de dígitos es n = 5 entonces 105 - 52520 = 47480. Ejemplo 33.- El complemento a 10 de 0.326710 es: 0.6733. Como no tiene parte entera entonces n = 0, por lo tanto : 100 - 0.3267 = 0.6733. Ejemplo 34.- El complemento a 10 de 25.63910 es: 74.361. Como la parte entera es n = 2 entonces: 102 - 25.639 = 74.361. Ejemplo 35.- El complemento a 2 de 1011002 es: 010100. C2 (101100) = 26 - 1011002 = 1000000 - 101100 = 010100 Ejemplo 36.- El complemento a 2 de 0.01102 es : 0.1010. C2 (0.0110) = 20 - 0.01102 = 12 - 0.01102 = 0.1010 De la definición y de los ejemplos, es claro que el complemento a 10 de un número decimal puede ser formado dejando todos los dígitos menos significativos ceros, sin cambiar; restando el primer dígito menos significativos distintos de cero desde 10; y restando todos los otros dígitos más significativos desde 9. El complemento a 2 puede ser formado dejando sin cambiar todos los dígitos menos significativos ceros y el primer dígito menos significativo distinto de cero; y reemplazando los "unos" por "ceros" y los "ceros" por "unos" en todos los otros dígitos más significativos. Un tercer método simple para obtener el complemento a r es dado más adelante en la definición del complemento a r - 1. El complemento a r de un número existe para cualquier base r (r > 1) y puede ser obtenido desde la definición dada anteriormente. En los ejemplos se usaron números con r = 10 (decimal) y r = 2 (binario), porque esas son las dos bases de más interés para nosotros. El nombre del complemento es relativo a la base del número usado. Por ejemplo, el complemento a r - 1 de un número en base 11 es llamado complemento a 10, puesto que r - 1 = 10 para r = 11. 1.5.2. Complemento a r-1. Dado un número positivo N en base r con una parte entera de n dígitos y una parte fraccionaria de m dígitos. El complemento a r - 1 de N es definido como: C(N)r-1 = rn - r-m - N Ejemplo 37.- El complemento a 9 de 5252010 es: como n = 5 y m = 0 entonces: C(52520)9 = 105 - 100 - 52520 = 99999 - 52520 = 47479 Ejemplo 38.- El complemento a 9 de 0.326710 es: como n = 0 y m = 4 entonces: C(0.3267)9 = 1 – 10-4 - 0.3267 = 0.9999 - 0.3267 = 0.6732 Ejemplo 39.- El complemento a 9 de 25.63910 es: Curso Electrotecnia VPG/1.17 Capítulo I. Representación de la Información C(25.639)9 = 102 - 10 −3 - 25.639 = 99.999 - 25.639 = 74.360. Ejemplo 40.- El complemento a 1 de 1011002 es: C1(101100) = (22)10 - (20)10 - (101100) = 1000000 - 1 - 101100 = 111111 - 101100 = 010011 Ejemplo 41.- El complemento a 1 de 0.01102 es: C1(0.0110) = (20)10 - (2-4)10 - 0.01102 = (0.1111 - 0.0110)2 = 0.1001. De los ejemplos, se puede ver que el complemento a 9 de un número decimal está formado simplemente por la resta de todos los dígitos desde 9. El complemento a 1 de un número binario es muy simple de obtener: "unos" son cambiados por "ceros" y los "ceros" por "unos". Puesto que el complemento a r - 1 es fácilmente obtenido, algunas veces es conveniente usarlo cuando se desea el complemento a r. De la definición, y comparando los resultados obtenidos en los ejemplos, el complemento a r puede ser obtenido del complemento a r - 1 después de sumarle r-m al dígito menos significativo. Por ejemplo el complemento a 2 de 10110100 es obtenido del complemento a 1 de 01001011 sumándole 1; lo que da como resultado 01001100. El complemento del complemento da como resultado un número que es el valor original. El complemento a r de N es rn - N y el complemento de rn - N es rn – (rn – N) = N; y similarmente para el complemento a r - 1. 1.5.3. Resta con Complemento.a) Resta con complemento a r. El método directo de resta utilizado en la escuela primaria usa el del concepto de "prestamo". En este método se pide un préstamo de 1 a la siguiente posición más significativa, cuando el minuendo es menor que su correspondiente sustraendo. Este método es muy fácil cuando se ejecutan restas con papel y lápiz. Cuando la resta es implementada por medio de componentes digitales, éste método es menos eficiente que el método de complemento y suma, expuesto a continuación. La resta de dos números positivos (M - N), ambos de base r, se puede obtener haciendo 1) Sume al minuendo M el complemento a r del sustraendo N; 2) Inspeccione el resultado obtenido en el paso (1) y para el acarreo final: a) si existe, descártelo; b) si no existe, tome el complemento a r del reultado obtenido del paso (1) y colóquele un signo menos delante. Ejemplo 42.- Usando el complemento a 10, sustraiga 72532 - 3250 M = 72532; N = 03250 ⇒ complemento a 10 de N = 96750 entonces: + 1 7 9 6 2 6 9 5 7 2 3 5 8 2 0 2 Acarreo final = 1; resultado final es 72532 - 3250 = 69282 Ejemplo 43. Reste (3250-72532)10 M = 03250; N = 72532 ⇒ complemento a 10 de N es 27468 entonces: Curso Electrotecnia VPG/1.18 Capítulo I. Representación de la Información 0 3 2 5 0 + 2 7 4 6 8 3 0 7 1 8 no hay acarreo; el conmplemento a 10 de 30718 es 69282 Por lo tanto, 3250 - 72532 = -69282 Ejemplo 44.- Usando complemento a 2 reste M - N con: a) M = 1010100 y N =1000100. Complemento a 2 de N = 0111100 + 1 1 0 0 0 1 0 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 El acarreao es 1, Entonces 1010100 – 1000100 = 10000 b) M = 1000100 y N = 1010100 Complemento a 2 de N = 0101100 1 + 0 1 0 1 1 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 como no hay acarreo, entonces se calcula el complemento a 2 del resultado de la suma y ese número, antecedido del signo menos es el resultado de la resta. C2 (1110000) = 0010000 ⇒ M - N = -10000 La prueba del procedimiento es: La suma de M al complemento de r da M + rn - N. Para números con parte entera de n dígitos, rn es igual a uno (1) en la posición (n+1) (que ha sido llamada "end carry"). Puesto que ambos M y N se asumen positivos, entonces: a) (M + rn - N) ≥ rn ; si M ≥ N o b) (M + rn - N) < rn ; si M < N. En el caso a) la respuesta es positiva e igual a M - N ; lo cual es obtenido directamente descartando el end carry rn . En el caso b) la respuesta es negativa e igual a -(N - M). Este caso es detectado con la ausencia del end carry. La respuesta es obtenida tomando un segundo complemento y anteponiéndole el signo negativo: - [rn - ( M + rn - N ) ] = - ( N - M ) b) Resta con complemento a (r - 1). El procedimiento para restar con complemento a (r - 1) es exactamente igual que el usado con complemento a r, con sólo una variación; llamada "end around carry". La resta de M - N, ambos números positivos en base r, puede ser calculada de la siguiente forma. 1) Se suma el minuendo al complemento a r-1 del sustraendo N; 2) Inspeccionándose el resultado obtenido en el paso anterior, para el end carry: Curso Electrotecnia VPG/1.19 Capítulo I. Representación de la Información a) si el end carry ocurre, se suma 1 al dígito menos significativo (end around carry); b) si el end carry no ocurre, se toma el complemento a r-1 del número obtenido en el paso (1) y se le antepone un signo negativo. Ejemplo 45: M = 72532 N = 03250. Solución. El complemento a 9 de N = 96749 la suma es: + 1 7 9 6 2 6 9 5 7 2 3 4 8 2 9 1 Dado que el carry end around es 1 se debe sumar 69281 + 1 = 69282 Por lo tanto: Ejemplo 46. M = 03250 ; N = 72532. Solución. El complemento a 9 de N = 27467; la suma es: 0 + 2 3 3 7 0 2 4 7 5 6 1 0 7 7 No hay acarreo. El complemento a 9 de 30717 = 69282. Por lo tanto, Ejemplo 47 es: M - N = 69282 M = 1010100 M - N = -69282 N = 1000100. Solución. El complemento a 1 de N es 0111011 la suma + 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 Hay acarreo, por lo tanto se debe hacer la suma 0001111 + 1 = 0010000 ⇒ M - N = 10000 Ejemplo 48 M = 1000100 N = 1010100. Solución. El complemento a 1 de N es 0101011 la suma es: + 1 0 1 0 1 1 0 0 0 0 1 1 1 0 1 0 1 1 No hay acarreo. El complemento a 1 de 1101111 es 0010000; 0 1 1 Por lo tanto: M - N = -10000 1.5.4. Comparación entre complemento a 1 y complemento a 2. Una comparación entre ambos complementos releva las ventajas y desventajas de cada uno. El complemento a 1 tiene la ventaja de ser más fácil de implementar por componentes digitales, ya que sólamente se cambian los unos por ceros y los ceros por unos. La implementación del complemento a 2 puede ser otenida de dos formas: a) Sumando un 1 al dígito al dígito menos significativo del complemento a 1; o b) Dejando todos los ceros de las posiciones menos significativas y el primer uno (1) sin cambiar ; y cambiando el resto de los unos por ceros y viceversa. Durante una resta de dos números usando complementos, el complemento a 2 tiene la ventaja de que requiere sólo una operación de suma, mientras que el complemento a 1 requiere de dos operaciones de suma cuando ocurre el end around carry. Curso Electrotecnia VPG/1.20 Capítulo I. Representación de la Información El complemento a 1 tiene la desventaja adicional de poseer dos ceros aritméticos: uno con todos ceros y otro con todos unos. Para ilustrar este hecho, consideremos la resta entre dos números binarios iguales 1100 - 1100 = 0 Usando complemento a 1 : 1 + 0 1 1 0 1 0 1 1 Usando complemento a 2 0 1 1 Complementando este resultado + 1 1 0 0 1 1 0 0 0 0 0 0 0 Entonces, como hay acarreo 1100 - 1100 = - 0000 1100 - 1100 = 0000 Mientras que el complemento a 2 posee sólo un cero aritmético, el complemento a 1 puede tener uno positivo o negativo; lo cual puede complicar su uso. Los complementos son muy utilizados para manipulaciones aritméticas en computadores digitales. Sin embargo, el complemento a 1 es también muy usado para manipulaciones lógicas, ya que cambiar los ceros por unos y viceversa es equivalente a una operación lógica inversa. El complemento a 2 generalmente es usado en aplicaciones aritméticas. 1.5.5 Representación BCD de números enteros. Binary-coded decimal (BCD 8421) es un sistema numérico usado en sistemas computacionales y electrónicos para codificar números enteros positivos y facilitar las operaciones aritméticas. En BCD, cada cifra que representa a un dígito decimal (0, 1, ...8 y 9), se representa con su equivalente binario en 4 bits (esto es así porque 4 es el número de bits necesario para representar el 9, el número más alto que debe ser representado en BCD). Como con cuatro bits se tienen 16 combinaciones posibles y los dígitos a representar son 10, existen seis combinaciones que no se utilizan. Una consecuencia de esto, entre otras, es que es posible tener varios códigos BCD diferentes. Basta asignar a cada digito decimal una combinación distinta para obtenerlos. La forma “natural” de asignarlos es en orden ascendente partiendo del 0000. Con esto se obtiene la representación BCD más utilizada y conocida como BCD natural, la que se muestra en la tabla siguiente. Como se observa en la tabla, con el BCD sólo se utilizan 10 de las 16 posibles combinaciones que se pueden formar con números de 4, por lo que el sistema pierde capacidad de representación, aunque se facilita la compresión de los números. Esto es porque el BCD solo se usa para representar cifras no números en su totalidad. Esto quiere decir que para números de más de una cifra hacen falta, para componerlo, tantos números BCD, como cifras tenga el número. A primera vista esto puede parecer más engorroso pero en realidad de cara al cálculo y la programación de sistemas digitales es sumamente práctico ya que permite trabajar de hecho con números decimales ordinarios haciendo uso solo de los dos bits posibles que otorga un circuito digital típico H (1) / L (0). Algo que como se verá resulta muy útil. Decimal 0 1 2 3 4 5 6 7 8 9 BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 Entonces, para representar un número decimal en BCD, cada digito del número debe estar representado por cuatro bits. Curso Electrotecnia VPG/1.21 Capítulo I. Representación de la Información Ejemplo 49. El numero decimal 34510 , por ejemplo, en BCD será: N= 3 4 5 Por lo tanto, 34510 se representa como 01101000101BCD ↓ ↓ ↓ 0011 0100 0101 BCD permite agilizar el proceso de traducción decimal-binario a costa de aumentar el número de bits de representación. Ejemplo 50. Convertir el número 10010101BCD a decimal. N = 1001 0101 ↓ 9 Por lo tanto, 10010101BCD corresponde al 9510 ↓ 5 Ejemplo 51. Convertir el número 41510 a BCD Natural. N= 4 1 7 Por lo tanto, 41710 corresponde al 10000010111BCD ↓ ↓ ↓ 0100 0001 0111 Suma en BCD La suma en BCD utiliza las mismas reglas de la suma binaria vistas antes. Si una suma de dos números es menor o igual que 9, el número BCD resultante es válido. Si la suma es mayor que 9, o si se genera un acarreo el resultado no es válido. En este caso, se suma el número binario 0110 para pasar de nuevo al código BCD. Si se genera acarreo al sumar 0110, éste se suma al siguiente grupo de 4 bits. En los siguientes ejemplos se verán los casos que se pueden presentar. Ejemplo 52. Sumar los números 01000101BCD (45)10 y 00010010BCD (12)10. La suma de la figura 3.11.1. no genera acarreos. 0 0 0 1 0 1 0 0 0 5 0 1 1 0 0 0 1 0 1 0 1 1 1 0 1 4 1 5 5 2 7 7 Suma BCD sin acarreo. Curso Electrotecnia VPG/1.22 Capítulo I. Representación de la Información Ejemplo 53. Sumar los números 00111001(39)10 y 01010110(56)10. La suma de los cuatro bits menos significativos de la figura 3.11.2. genera acarreo. 0 0 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 9 0 1 1 1 1 0 1 1 1 0 1 0 1 0 1 3 5 9 9 6 5 5 Suma BCD con acarreo en el dígito BCD menos significativo Ejemplo 54. Sumar los números 01111001(79)10 y 00110101(35)10. 0 0 0 1 1 0 0 1 0 0 1 0 0 1 0 1 1 1 1 0 1 1 1 0 0 1 1 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 0 0 1 1 7 3 1 9 5 4 4 Suma BCD con acarreo en dos dígitos La suma de dígito BCD menos significativo de la figura. genera acarreo, al igual que el segundo dígito BCD. Curso Electrotecnia VPG/1.23 Capítulo I. Representación de la Información 1.6 Códigos. 1.6.1. Introducción. En los últimos 40 años se ha producido un cambio extraordinario en el mundo de la tecnología. Los computadores, que eran máquinas lentas y caras controladas por tarjetas perforadas, se han convertido en poderosas unidades de bajo costo que no ocupan más espacio que un portadocumentos. Al mismo tiempo, ha invadido nuestro mundo una maraña de cables telefónicos, fibras ópticas, cables submarinos, enlaces por microondas, canales de televisión y comunicaciones por satélite. En la intersección de ambos fenómenos se encuentra Internet, resultado directo del cruce entre la tecnología informática y la tecnología de la comunicación. Pero, a juicio de muchos, este fenómeno no es más que un primer hito de lo que promete convertirse en una gigantesca revolución de la forma en que los individuos se comunican, se distraen y trabajan. Hemos entrado en la era de la convergencia digital. Según un artículo reciente del Scientific American, esa convergencia es en principio “la unión del audio, el vídeo y la transmisión de datos en una sola fuente, recibida en un solo aparato y facilitada mediante una sola conexión.” La tecnología digital ha proporcionado ya un mecanismo para integrar medios que hasta ahora necesitaban canales diferentes. La plena convergencia digital augura un acceso a la información en tiempo real en cualquier lugar del mundo, y la posibilidad de comunicarse con alguien dondequiera que se encuentre mediante un texto, gráficos, vídeo y audio. De hecho, no parecen existir límites tecnológicos a las posibilidades que se abren. 1.6.2 Codificación de la información. La codificación de la información, es una necesidad que surge como consecuencia del estudio de la naturaleza de la información y de su transmisión.. La información es todo aquello que es captado por los sentidos y llega al cerebro, produciendo un incremento de nuestros conocimientos o una reacción. El funcionamiento de las sociedades animales y humanas es posible gracias a la comunicación. Esta se define como un acto mediante el cual un individuo establece con otro u otros, un contacto que le permite transmitirles una información. Para que la comunicación se produzca, es necesario disponer de un conjunto limitado y moderadamente extenso de símbolos que se combinan mediante ciertas reglas, conocidas por el emisor y receptor, mediante las cuales el emisor representa lo que intenta transmitir. Se denomina símbolo a un objeto material (audible, visible, etc.) que representa a otro objeto (material o in material) y que se utiliza para recibir, conservar o transmitir una información relativa al objeto representado. Dado que la tecnología digital utiliza símbolos binarios, la base de toda aplicación digital es un sistema de codificación binario. El código binario permite asignar a los números, letras y caracteres reglas digitales únicas que pueden registrarse en cinta magnética, discos compactos, DVD y archivos informáticos. Estos códigos digitales se pueden transmitir fácilmente a través de alambres de cobre, fibra óptica u ondas radiofónicas. Y, por consiguiente, una vez reducidos a formato digital, los textos, el audio, los gráficos y el vídeo pueden ser procesados con gran precisión por una sola tecnología común. La necesidad de codificar en un ambiente digital, tiene su origen en que el operador humano trabaja en un lenguaje que no es binario; el hombre cuenta y entiende en términos decimales, es decir, de diez en diez, por consiguiente se hacen necesarios procedimientos o métodos de conversión entre ambos “lenguajes”, que permitan la comunicación entre el hombre y la máquina. A estos métodos se les da el nombre general de códigos. Curso Electrotecnia VPG/1.24 Capítulo I. Representación de la Información En realidad, en nuestra vida cotidiana los códigos están presentes por doquier y los utilizamos muy frecuentemente sin darnos cuenta; son ejemplos de codificación la guía de teléfonos, los semáforos en las calles, el catálogo de libros en la biblioteca, planos de calles, etc. En todos los casos se trata de identificar “algo”, (una calle, un teléfono, un libro), mediante un conjunto específico de símbolos. En resumen, el concepto de código, aunque no sea consciente, es familiar para el ser humano actual. En el caso de la tecnología digital, la aplicación de este concepto consiste convertir elementos fuente tales como números decimales, letras y símbolos de puntuación, sonido, video, etc. en elementos binarios y vicerversa. 1.6.3. Concepto de código. En un enfoque de mayor formalidad y desde el punto de vista de la tecnología, la definición más general de código es: Código Es la correspondencia que asigna a cada símbolo de un alfabeto dado {F1, F2, …..Fn} denominado alfabeto fuente, una determinada combinación de símbolos de otro alfabeto {C1, C2, …..Cn}, denominado alfabeto código y viceversa. La figura 1a). Muestra un código entre dos alfabetos, en que ambos están formados por letras. Pero, no necesariamente los alfabetos están formados por letras, perfectamente el alfabeto fuente puede ser un conjunto de objetos y el alfabeto código pueden ser números. Un ejemplo de ello es el descrito en la figura 1b). Tabla 1 Alfabeto Fuente α β χ δ ε φ Tabla 2 ↔ ↔ ↔ ↔ ↔ ↔ Alfabeto Código a b c d e f a) Relaciona dos conjuntos de símbolos Alfabeto Fuente Mesa Silla Pizarra Teléfono Monitor Impresora ↔ ↔ ↔ ↔ ↔ ↔ Alfabeto Código 01 10 100 101 110 111 b) Relaciona objetos y símbolos Fig. 1. Ejemplos de códigos. Realmente, en nuestra vida cotidiana, estamos utilizando códigos continuamente. El ejemplo más cercano para los chilenos es el RUT, que identifica unívocamente a cada persona nacida en Chile. Otro caso de codificación muy conocido es el directorio telefónico, el cual asocia a una persona con un número de teléfono y a través del cual se puede contactar a una persona de entre millones, en unos pocos segundos. Las patentes de los vehículos es otro ejemplo que asocia automóviles con un código especialmente diseñado para este propósito. 1.6.4. Propiedades de interés de los códigos. Dada la gran cantidad de códigos diferentes que se pueden crear atendiendo a la definición general de código efectuada anteriormente, se limita el estudio a aquellos códigos que presenten ciertas propiedades suplementarias que les hacen útiles. Curso Electrotecnia VPG/1.25 Capítulo I. Representación de la Información A cada secuencia de símbolos que se pueden formar con el alfabeto código, se le llama palabra de código. Al número de símbolos Ci que contiene la palabra de código se llama longitud de palabra. Y al número de símbolos distintos que componen el alfabeto código se le llama base del código. Ejemplo. Si el alfabeto fuente está formado por los símbolos {α, β, χ, δ} y el alfabeto código por {0, 1}, un posible código, con palabras de longitudes dos y tres simultáneamente y con base de código 2 es el representado en la Tabla 3 Tabla 3 Símbolos fuente α β χ δ → → → → Palabras de código 01 10 101 010 Evidentemente, un sistema de numeración (cualquiera sea la base) es un código que permite representar todos los números comprendidos entre 0 y ∞. Código uniforme. Un código es uniforme si a cada símbolo fuente le corresponde una palabra de código. A los códigos que cumplen esta propiedad se le denomina también códigos de bloque. Código no singular. Un código uniforme es no singular si a cada símbolo fuente le corresponde palabras de código distintas. Ejemplo. El código de la Tabla 4. siguiente cumple las dos propiedades anteriores, es uniforme y no singular. Tabla 4. Código uniforme y no singular Símbolos fuente Palabras de código → 0 α → 1 β → 00 χ → 11 δ Las palabras que resultan de codificar todas las parejas de símbolos del alfabeto fuente de la Tabla 4, están representadas en la Tabla 5. A este código se le llama extensión de orden dos del código de partida. Tabla 5. Extensión de orden dos de un código Símbolos Palabras Símbolos Fuente de código Fuente 00 → → αα χα 01 → → αβ χβ 000 → → αχ χχ 011 → → αδ χδ 10 → → βα δα 11 → → ββ δβ 100 → → βχ δχ 111 → → βδ δδ Curso Electrotecnia Palabras de código 000 001 0000 0011 110 111 1100 1111 VPG/1.26 Capítulo I. Representación de la Información Se aprecia que, aunque todas las palabras de código de partida son diferentes, como se puede ver en la Tabla 4, es posible encontrar una secuencia de palabras código, en la Tabla 5, con origen indefinido. Así por ejemplo la secuencia 111 puede corresponder a la pareja de símbolos fuente βδ ó a δβ. De esto se deduce que el código de partida, aun siendo no singular, da origen a secuencias de símbolos del alfabeto código iguales. Es decir, se producen extensiones de código singulares. Lo anterior muestra que en una transmisión digital no se puede obtener, de forma unívoca, la secuencia de símbolos fuente, partiendo de la secuencia de símbolos código recibidos y cuestiona la necesidad de definir una nueva condición más restrictiva que la uniformidad y la no singularidad para que el código sea utilizable. Esta condición es Decodificación unívoca. Decodificación unívoca. Un código es unívocamente decodificable si y solo si su extensión de orden n es no singular para cualquier valor finito n. Esta propiedad asegura que dos secuencias cualesquiera de símbolos fuente, de la misma longitud, dan lugar a secuencias distintas de símbolos de código. De la definición de esta propiedad se deduce que también será necesario que la condición se cumpla en secuencias de símbolos fuente de longitud distinta. Ejemplos. En la tabla 6 se muestran tres ejemplos de códigos unívocamente decodificables. El código A es la forma más sencilla y utilizada de crear códigos unívocamente decodificables. Este código es no singular y con palabras de igual longitud o longitud fija. Estas dos propiedades son suficientes para garantizar la decodificación unívoca. Tabla 6. Códigos unívocamente decodificables Símbolos Código Código Código Fuente A B C 00 0 0 → α 01 01 10 → β 10 011 110 → χ 11 0111 1110 → δ El código B, también es unívocamente decodificable. Es no singular y aunque no tiene longitud fija, el símbolo 0 separa una palabra de la siguiente, por lo que implícitamente se conoce la longitud de cada palabra. Este tipo de códigos reciben el nombre códigos coma. Así, el símbolo coma puede interpretarse como el lugar donde termina una palabra y comienza la siguiente. El código C es también unívocamente decodificable. Se diferencia de los códigos A y B en el siguiente aspecto importante: si se reciben secuencias binarias en el código C, no se pueden identificar las palabras de la secuencia según se van recibiendo los dígitos binarios. Por ejemplo al recibir 01, primero se recibe el 0 y posteriormente el 1, no pudiéndose asegurar que el símbolo fuente es β, mientras no se reciba el bit siguiente. Si el bit siguiente es 0, efectivamente el símbolo fuente es β, pero, si es 1, hay que esperar a otro bit para asegurar que el símbolo fuente es χ, puesto que si el bit es 1, se ha recibido la secuencia 0111 y el símbolo correspondiente sería δ. La diferencia que presenta el código C, con respecto a los códigos A y B denota la necesidad de identificarla definiendo una nueva propiedad. Curso Electrotecnia VPG/1.27 Capítulo I. Representación de la Información Decodificación Instantánea. Se denomina instantáneo, a un código unívocamente decodificable, cuando éste permite decodificar sin ambigüedad las palabras contenidas en una secuencia de símbolos del alfabeto código, sin necesitar el conocimiento de los símbolos que les suceden. No siempre es sencillo determinar cuando un código permite decodificación instantánea, como en los casos anteriores de los códigos A, B y C. es necesario disponer de una regla general que permita fácilmente identificar a los códigos instantáneos. Definición. Sea una palabra de código cualquiera C1 C2 … Cs. Se denomina prefijo de esta palabra a una secuencia de símbolos C1 C2 … Ci , donde i ≤ s . Ejemplo. La palabra 1010 tiene cuatro prefijos: 1010, 101, 10 y 1. La condición necesaria y suficiente para que un código se instantáneo es que ninguna de las palabras sea prefijo de otra. Ejemplo. A partir de la Tabla 6, se calculan los prefijos de cada palabra de código. Para los códigos A y B se prueba fácilmente que ninguna de sus palabras código son prefijos del resto de las palabras código. Así lo muestran la Tabla 7 y la tabla 8. Tabla 7. Prefijos del código A Código A Prefijos De A 00 00 0 01 01 0 10 10 1 11 11 1 Tabla 8. Prefijos del código B Código B Prefijos De B 00 0 01 10 1 10 110 11 1 11 1110 111 11 1 Sin embargo, en la Tabla 9, que representa el código C y sus prefijos, se aprecia cómo la palabra código 0 es prefijo de todas las demás palabras código; la palabra 01 es prefijo de 011 y 0111; la palabra código 0111 es prefijo de la palabra código 01111. Por los que este código no es instantáneo, como ya se había observado anteriormente. Tabla 9. Prefijos del código C Código C Prefijos De C 0 0 01 01 0 011 011 01 0 0111 0111 011 01 0 La figura 2 muestra un resumen de las propiedades de códigos definidas hasta aquí. Están representadas gráficamente las cinco diferentes subclases de código que corresponden cada una de ellas con las terminaciones de las ramificaciones. Códigos No Bloque o no uniforme De Bloque o uniforme Singulares No Singulares No unívocos Unívocos VPG/1.28 Curso Electrotecnia No instantáneos Fig. 2 Instantáneos Resumen de propiedades de los códigos Capítulo I. Representación de la Información 1.6.5. Características generales de un código. Para realizar un código pueden emplearse dos procedimientos generales: 1. El conjunto de elementos u objetos a codificar se representa, en el código, por un solo signo. Los signos necesarios deben separarse en un grupo de símbolos; el número de estos símbolos debe ser por lo menos igual al número de objetos que deben identificar (unívoco). En este caso, la identificación de un objeto necesita solamente una información. Ejemplo. Supongamos que se desea codificar los siguientes elementos de oficina (objetos a codificar): Mesa, silla, Impresora, Teléfono, Monitor y Pizarra. Para aplicar el método descrito se puede elegir por ejemplo un subconjunto de símbolos del alfabeto castellano, sean estos a, b, c, d, e y f, con lo cual se puede establecer el siguiente código. Tabla 10. Código Mesa ↔ Silla ↔ Pizarra ↔ Teléfono ↔ Monitor ↔ Impresora ↔ a b c d e f 2. Cada objeto del conjunto a codificar está representado en el código por una yuxtaposición de signos. Los signos necesarios pueden separarse en un grupo de símbolos y con la yuxtaposición de un pequeño número de estos símbolos codificar un número mayor de objetos. Ejemplo. Utilizando los signos a, b, 1, 2 y 3 se puede realizar el siguiente código: Tabla 11 Código Mesa ↔ Silla ↔ Pizarra ↔ Teléfono ↔ Monitor ↔ Impresora ↔ a1 a2 a3 b1 b2 b3 Se tiene que con 5 signos se pueden codificar 6 objetos. Ejemplo 2. Un ejemplo mucho más representativo es sin duda la codificación de la patentes de los automóviles, en el que con 26 letras y 10 dígitos (un total de 36 signos), al yuxtaponerlos, se codifican millones de objetos (automóviles). Para identificar un conjunto de N objetos distintos pueden emplearse los dos métodos expuestos antes, pero con numerosas variantes basadas en dichos procedimientos y que se adoptan de acuerdo con el número de objetos distintos que deben identificarse. Curso Electrotecnia VPG/1.29 Capítulo I. Representación de la Información Ejemplo 3. Supongamos que se desean identificar 22 objetos distintos (N=22). Pueden adoptarse varias soluciones: Solución 1. Representar cada objeto por una letra del alfabeto (código alfabético). Cada objeto está representado en el código por un solo signo, que se ha elegido de entre 26 letras que constituyen el alfabeto. Para ello se debe disponer de un codificador que puede tomar 22 estados diferentes y cada objeto está codificado por un estado de este dispositivo. Este procedimiento intuitivo de codificación es muy utilizado en la vida cotidiana por su simplicidad y evidencia, pero, existe el inconveniente que, para conjuntos de un número relativamente elevado de objetos (por ejemplo 1000 objetos), resulta difícil establecer y memorizar los símbolos necesarios. Con un código como el expuesto, solamente se necesita una información para identificar un objeto. Solución 2. Representar cada uno de los 22 objetos distintos por un número decimal. (código numérico). En este caso, cada objeto está representado por la yuxtaposición de dos signos cada uno de los cuales es elegido de entre los diez dígitos decimales (sin embargo, el primer signo se elige de entre las tres primeros dígitos 0, 1 y 2). Cada número del código comprende dos signos, obtenidos del mismo grupo de 10 símbolos. En este caso la identificación de un objeto necesita de dos informaciones. Solución 3. Representar cada uno de los 22 objetos distintos por un número binario (también se trata de un código numérico). Ahora cada objeto está representado por la yuxtaposición de 5 dígitos, cada uno de los cuales está elegido entre las dos cifras del sistema binario (0 y 1). En este caso la identificación de un objeto necesita de cinco informaciones. Tabla 12. Código Objeto-1 ↔ Objeto-2 ↔ Objeto-3 ↔ Objeto-4 ↔ Objeto-5 ↔ Objeto-6 ↔ Objeto-7 ↔ Objeto-8 ↔ Objeto-9 ↔ Objeto-10 ↔ Objeto-11 ↔ binario para 22 objetos 00000 00001 00010 00011 00100 00101 00110 00111 01000 01001 01010 Objeto-12 Objeto-13 Objeto-14 Objeto-15 Objeto-16 Objeto-17 Objeto-18 Objeto-18 Objeto-19 Objeto-21 Objeto-22 ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ 01011 01100 01101 01110 01111 10000 10001 10010 11011 11100 11101 A propósito de lo dicho hasta ahora, se pueden hacer tres observaciones, que tienen gran importancia para comprender las materias que se explican a continuación: 1. En las tres soluciones propuestas se tiene: a) En la primera solución, la cantidad máxima de signos disponibles para realizar la asignación es de 26 (ya que hay 26 letras en el alfabeto) y solamente se necesitan 22 símbolos. En este caso se dice que la capacidad del código es de 26 y que se trata de un código redundante, puesto que existen más posibilidades en el código que objetos a codificar. b) En la segunda solución la capacidad del código es de 30, aunque solamente se han de codificar 22 objetos: también se trata de un código redundante y en mayor grado que el anterior. c) En la tercera solución, la capacidad del código es de 32 (desde el 010 o 000002 hasta el 3110 o 111112). Como solo se codifican 22 objetos, también se trata de un código redundante. Curso Electrotecnia VPG/1.30 Capítulo I. Representación de la Información 2. La ausencia de objetos puede constituir también un objeto que debe codificarse: ha de encontrarse un símbolo en el código que exprese la ausencia de objetos. Por consiguiente, en el caso de 22 objetos, se necesita un código que tenga por lo menos una capacidad de 23. En estas circunstancias todas las soluciones propuestas resultan válidas. 3. En todos los casos se necesitan dispositivos tecnológicos que puedan, cada uno de ellos, tomar cierto número de estados diferentes. Se podría demostrar que este número de estados diferentes disminuye a medida que crece el número de informaciones necesarias para identificar un objeto. Es decir, cuando más simple es el dispositivo codificador, mayor número de informaciones (por tanto dispositivos codificadores), se necesita para identificar un objeto en un conjunto de N objetos. Es evidente que se puede suponer que hay una capacidad de código óptima; ello es efectivo y se tratará más adelante. 1.6.6. Códigos Numéricos. Son códigos numéricos aquellos en que los alfabetos están formados por números. Los números en el contexto de este texto son "palabras de código" que representan valores numéricos. Los códigos de uso común normalmente son diseñados para optimizar alguno de los siguientes criterios: 1) Minimizar la complejidad de la ejecución de las operaciones aritméticas en un sistema numérico dado. Este criterio determina también, en gran medida, la velocidad de las operaciones aritméticas. 2) Facilitar la conversión a y desde la notación decimal estandar a cualquier otra notación requerida para entrada y salida. 3) Facilitar la detección y corrección de errores. 4) Maximizar la eficiencia de utilización de dispositivos de almacenamiento. 1.6.6.1. Códigos numéricos de bases relacionadas por una potencia entera de dos. Los sistemas numéricos relacionados por una potencia entera de dos (octal y hexadecimal) fueron, de hecho, los primeros códigos usados en equipos digitales, siendo aún utilizados en pequeños sistemas basados en "microprocesadores". La tabla 13 siguiente muestra la equivalencia entre sistema de numeración decimal, binario, octal y hexadecimal, para los primeros 16 dígitos decimales. Tabla 13. Sistemas de numeración Decimal, binario, octal y hexadecimal Decimal Binario Octal Hexadecimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Curso Electrotecnia 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1001 1010 1011 1110 1111 00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17 0 1 2 3 4 5 6 7 8 9 A B C D E F VPG/1.31 Capítulo I. Representación de la Información La necesidad de los primeros códigos utilizados es estos sistemas, nace de la alta probabilidad de error por parte de un operario humano, al ingresar información binaria. Como ejemplo ilustrativo, consideremos un dispositivo digital con capacidad para procesar unidades de información (Instrucciones, Data, etc.) de cuatro bits. Supongamos que tal dispositivo realiza ciertas operaciones con las instrucciones y datos mostrados en la tabla 14. El ingreso de esta información al almacenamiento del dispositivo por parte de un ser humano está muy expuesto a errores, aumentando a medida que es mayor la cantidad de unos y ceros y esto, sin considerar lo tedioso del trabajo. Tabla 14. Unidades de información 0 1 0 1 1 1 0 0 0 1 1 1 0 1 1 0 0 0 0 0 En cambio al entrar esta información codificada en octal o hexadecimal sería como se muestra en la Tabla 15, se reduce sustancialmente la cantidad de dígitos a entrar, reduciendo también las posibilidades de error. Tabla 15 Octal 05 14 07 06 00 Hexadecimal. 5 E 7 6 0 El sistema numérico octal es usado en dispositivos de entrada y salida en sistemas de procesamiento de data digital. La facilidad de codificación y decodificación de los números del sistema octal lo hacen ideal cuando se desean aplicaciones de entrada y salida con un mínimo de Hardware. Sin embargo, los recientes avances en la tecnología de semiconductores y la gran disponibilidad de circuitos integrados, está desplazando la utilización del sistema octal. Actualmente, la conversión de binario a decimal y viceversa no requiere gran cantidad de hardware ni espacio excesivo, y como los equipos digitales están siendo permanentemente actualizados, las operaciones en octal gradualmente desaparecerán en favor de una más fácil manipulación de los dispositivos de entrada/salida con sistema decimal. El sistema hexadecimal, en cambio, continuará encontrando un amplio uso en los computadores digitales llamados "orientados al carácter". Los Ingenieros, técnicos y programadores que trabajan estrechamente ligados al computador no encuentran mayores dificultades en trabajar con estos sistemas numéricos no decimales. El hardware de conversión es reducido en estos casos sin pérdida de utilidad. Sin embargo, cuando la información es desplegada a usuarios no orientados al computador debe emplearse el sistema decimal. 1.6.6.2. Capacidad de un código numérico. En los equipos electrónicos digitales se utilizan, casi exclusivamente, códigos numéricos. Se denomina capacidad de un código al número total de objetos que se pueden identificar con la aplicación de dicho código. Un código numérico que emplea un sistema de numeración de base b y que lleva n cifras yuxtapuestas (en los códigos numéricos, a las cifras yuxtapuestas se les llama también dígitos), tiene una capacidad máxima de: M = bn Es decir, que permite escribir todos los números desde 0 (incluido) hasta un número A = b n − 1 . Curso Electrotecnia VPG/1.32 Capítulo I. Representación de la Información Por otra parte, n dispositivos de codificación, que pueden tomar, cada uno de ellos, b estados distintos, tienen la misma capacidad b n , es decir que permiten identificar A = b n − 1 objetos distintos, además de la ausencia de objetos. Por consiguiente para identificar N objetos, el código debe ser tal que: A ≥ N , es decir que se puede cumplir la condición b n ≥ N + 1 . Se exponen algunos ejemplos de aplicación para aclarar estos conceptos. Se trata de identificar N = 99999 objetos distintos, es decir que la capacidad global del código debe ser de N + 1 = 100.000 . Recurriendo a los sistemas de numeración estudiados hasta ahora, un código semejante se puede obtener: Sistema de numeración binario. La potencia de 2 más próxima es: 217 = 131.072 , es decir, que se necesita como mínimo, un número binario de 17 bits, resultando además un código redundante. Sistema de numeración octal. La potencia de 8 más próxima es: 86 = 262.144 , que además es muy redundante. Sistema de numeración decimal. La potencia de 10 superior más próxima es: 105 = 100.000 , o sea que se necesita un número decimal de 5 dígitos, que además, no es redundante (la capacidad global del código coincide con el número total de objetos a identificar. Sistema de numeración hexadecimal. La potencia de 16, superior más próxima es 165 = 1048.576 , resulta un número de 5 dígitos que además es muy redundante. 1.6.6.3. Complejidad de un sistema de codificación. En un código determinado, para identificar un objeto de entre N objetos a decodificar, se necesitan N dispositivos que pueden tomar, cada uno de ellos, b estados distintos, siendo la capacidad del código mayor que el número de objetos N ( A ≥ N ). Es decir, que cuanto menor es b, más sencillo resulta el dispositivo de decodificación; por el contrario, mayor debe ser el número n de dígitos necesarios. Entonces, ¿donde está la solución óptima? Para encontrar esta solución óptima, se define la complejidad de un sistema de codificación por el producto: C = nb Cuanto menor es el producto anterior, es decir, cuanto menor es la complejidad de un código, más apropiado resulta desde el punto de vista tecnológico. A continuación vamos a hallar la complejidad da cada uno de los códigos expuestos como ejemplos en los párrafos anteriores. Código Binario: Código octal. Código decimal. Código hexadecimal Complejidad Complejidad Complejidad Complejidad C = nb = 17* 2 = 34. C = nb = 6*8 = 48. C = nb = 5*10 = 50 C = nb = 5*16 = 80 De lo expuesto se deduce que el código binario, aunque tiene un gran número de dígitos, desde el punto de vista de la complejidad es el más apropiado de entre los códigos numéricos utilizados en electrónica digital. Además, desde el punto de vista tecnológico, está concretizado por elementos muy sencillos, que pueden tomar solo dos estados distintos; la información necesaria para cada dispositivo se reduce a la única alternativa: todo o nada. Por todas estas razones, los códigos basados en el sistema de numeración binario convienen muy especialmente a la técnica de los procesos automáticos industriales y a los computadores, por lo que el estudio de los códigos estará centrado en los códigos binarios más empleados en la electrónica digital. Curso Electrotecnia VPG/1.33 Capítulo I. Representación de la Información 1.6.7. Códigos binarios. En un equipo electrónico digital o un computador se utilizan, según sea el caso, para almacenar datos, controlar procesos industriales, relacionar entre si varias informaciones, etc. En cualquier momento podemos necesitar uno o más datos, los cuales están almacenados en los equipos electrónicos y para identificar un dato determinado se necesita un código que permita su localización. Pero existe una dificultad. En los códigos utilizados cotidianamente se emplea casi siempre el sistema de numeración decimal, mientras que los sistemas digitales trabajan con el sistema de numeración binario. Por lo tanto, el número decimal correspondiente al dato deseado debe traducirse previamente a un número binario para que el equipo digital pueda operar y una vez encontrado el dato, el equipo digital debe traducir nuevamente el resultado que está expresado en binario, en el sistema decimal que es sistema que entiende el operario humano. O sea, que para operar un equipo digital son necesarios los siguientes elementos y operaciones: 1. Un código binario. 2. Un sistema de codificación, que forma parte del equipo digital y que traduce las instrucciones del operador humano (en sistema decimal) en instrucciones para el equipo digital en el código binario previamente establecido. 3. La información (ya codificada en binario), recorre los elementos del equipo hasta encontrar el dato buscado, el cual se dirige a la salida del equipo, dispuesto para ser utilizado por el operador. 4. Un sistema de decodificación, que también forma parte del equipo digital, y que traduce el dato solicitado al sistema decimal, legible para el operador humano. Los códigos que se estudian en este apunte son instantáneos de longitud de palabra fija. Ahora bien, los códigos instantáneos de longitud de palabra variable tienen una importante aplicación en la transmisión de señales, donde existen diferentes probabilidades de que aparezcan los distintos símbolos fuente. En estos casos se asignan las palabras de código más cortas a los símbolos fuente más probables, minimizándose el número de símbolos a transmitir. Un ejemplo de código instantáneo de longitud variable es el código Morse. Los códigos estudiados aquí son aquellos empleados en el proceso de información en vez de los utilizados en transmisión, por lo que es más práctico utilizar los códigos de longitud física, siendo usual volver a codificar de nuevo esta información en códigos de longitud variable cuando se transmita la información. Como la codificación consiste en establecer una correspondencia entre las palabras de código y los símbolos fuente, con un código binario de n bits (bn-1, bn-2, ………b1, b0) se pueden obtener 2n combinaciones (palabras de código) distintas. Lógicamente, cada combinación o palabra de código se asigna a un símbolo del alfabeto fuente. Pero estas asignaciones, a su vez, se pueden realizar de diferentes formas, siendo el número posible de estas las permutaciones de 22 combinaciones. Cada forma de hacer las asignaciones dará lugar a un código diferente, es decir, habrá (2n)(2n-1)……(2)(1)=2n! posibles códigos. Ejemplo para codificar el alfabeto fuente {A,B,C,D}, con el alfabeto código {0,1}, son necesarias palabras de longitud n = 2, ya que 2n = 22 = 4, siendo este el número de símbolos del alfabeto fuente. El número de códigos distintos que se pueden formar es 2n! = 2! =24, los que se representan en la Tabla 16 Tabla 16 Número de códigos distintos que se pueden formar para codificar un alfabeto fuente dado A B C D A B D C A C B D A C D B A D B C Curso Electrotecnia A D C B B A C D B A D C B C A D Símbolo fuente B B B C C C C D D A A B D A C B D A A C A D B D C B D A C D A B C D B A D A B C D A C B D B A C D B C A D C A B D C B A Palabra de código 00 01 10 11 VPG/1.34 Capítulo I. Representación de la Información 1.6.7.1. Principales definiciones y propiedades de los códigos binarios. Ponderados. Son aquellos códigos que a cada dígito binario se le asigna un peso y a cada palabra de código la suma de los pesos de los dígitos binarios con valor 1, siendo el resultado igual al número decimal que representan. Ejemplo. Considerando que la palabra de código 1101 está representada en el sistema binario, su valor decimal se obtiene al sumar los pesos 1⋅ 8 + 1⋅ 4 + 1⋅ 1 = 13 representando dicha palabra de código al símbolo fuente 13. Distancia entre dos palabras. Se define como el número de dígitos que deben ser invertidos en una de ellas para obtener la otra. Ejemplo. La distancia entre 1011 y 1100 es tres, ya que las dos palabras de código se diferencian en tres bits. Distancia del código. Se define como la menor de las distancias entre dos cualesquiera de sus palabras d código. Palabras adyacentes. Dos palabras de código son adyacentes si su distancia es uno, es decir, solo difieren en un bit. Ejemplo. La palabra de código 1100 es adyacente a 1101 Continuos. So aquellos códigos cuyas palabras consecutivas son adyacentes; es decir, si dos cualesquiera de sus palabras de código consecutivas sólo difieren en un bit. Cíclicos. Son aquellos códigos que además de ser continuos, la primera y última palabra de código tambié son adyacentes. Denso. Se define a un código como denso si teniendo una longitud de palabra de n bits, está formado por 2n palabras de código Autocomplementarios al número N. Son aquellos códigos cuya palabra de código y su complementada suman N. los códigos con esta propiedad posibilitan efectuar más fácilmente las operaciones de resta mediante el complemento a N. 1.6.7.2. Clasificación de los principales códigos binarios: 1. Códigos Numéricos Códigos de bases relacionadas por una potencia de dos. BCD Ponderado Natural, Aiken 2421, Aiken 5421, No Ponderado Exceso 3 Códigos progresivos Gray Johnson Detectores de errores Biquinario 2 entre 5 Con bit de paridad Código Hamming Corrector de errores 2. Códigos alfanuméricos Código ASCII Código estándar ISO-8859. Curso Electrotecnia VPG/1.35 Capítulo I. Representación de la Información 1.6.7.3. Códigos decimales codificados en binario (BCD). Uno de los principales problemas que enfrenta un ingeniero, técnico, programador o cualquier usuario de un equipo digital (ya sea este computador de control o de medida) es la "conversión de un código realmente manejable por una persona a un código realmente manejable por un equipo". La mayoría de la gente puede trabajar mejor con el sistema decimal, mientras que las máquinas trabajan más eficientemente con el sistema binario. La mejor solución a este problema se encuentra en los códigos "decimales codificados en binario" (códigos BCD, Binary Coded Decimal). Diez símbolos únicos (los del sistema decimal) deben ser representados por una combinación de solamente dos únicos símbolos (los del sistema binario). De esta forma, si cada dígito de un número decimal se representa por su equivalente binario, se genera el código llamado decimal codificado en binario. Puesto que un dígito decimal puede ser tan grande como 9, se requieren 4 bits para codificar cada dígito (el código binario para 9 es 1001). Cuatro bits dan como resultado 16 combinaciones, seis de las cuales no son usadas. Las 10 combinaciones necesarias pueden ser obtenidas de cualquiera de las 16 combinaciones posibles, pudiendo entonces generarse numerosos códigos diferentes, dependiendo de las combinaciones específicas utilizadas. Entonces, para representar un número decimal en BCD, cada dígito del número debe estar representado por cuatro bits. El número decimal 34510 , por ejemplo, en BCD será: 3 4 5 0 0 1 1 0 1 0 0 0 1 0 1 En binario, 34510 se representa como 101011001. Note que para la representación binaria se requieren solamente 9 bits, en cambio en BCD se requieren 12 bits. Sin embargo, es mucho más fácil reconocer el número decimal codificado en BCD que en binario, siendo entonces los tres bits adicionales el precio que hay que pagar por esta comodidad. Es evidente entonces que el sistema pierde capacidad de representación, aunque se facilita la compresión de los números. Esto es porque el BCD solo se usa para representar cifras no números en su totalidad. Esto quiere decir que para números de más de una cifra hacen falta dos números BCD para componerlo. A primera vista esto puede parecer más engorroso pero en realidad de cara al cálculo y la programación de sistemas digitales es sumamente práctico ya que permite trabajar de hecho con números decimales ordinarios haciendo uso solo de los dos bits posibles que otorga un circuito digital típico ON (1) / OFF (0). Los códigos BCD pueden ser clasificados como "Ponderados o pesados" y "No ponderados o no pesados". Los códigos pesados siguen la estructura de la notación posicional (cada dígito tiene un "peso" según sea su posición en el número) y por lo tanto, el número decimal equivalente surge de sumar los pesos de las posiciones que posean el valor 1. Los valores posicionales no necesariamente tienen que ser potencias ascendentes de dos; ellas pueden ser asignadas arbitrariamente y aún tener pesos negativos. De los BCD ponderados, los más importantes son el BCD natural (8 4 2 1), el BCD Aiken 2 4 2 1 y el BCD Aiken 5 4 2 1. Curso Electrotecnia VPG/1.36 Capítulo I. Representación de la Información a) Código BCD pesado 8-4-2-1. (BCD Natural) El código BCD pesado más común es el código 8-4-2-1, conocido también como código BCD natural. El dígito más significativo tiene un peso de 8; el siguiente más significativo un peso de 4 y así sucesivamente. La correspondencia entre los dígitos decimales y la representación BCD8-4-2-1 se muestra en la tabla 17. Tabla 17. Código BCD Natural Decimal 0 1 2 3 4 5 6 7 8 9 BCD Natural 8 4 2 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 Peso Para convertir un número decimal a BCD natural o viceversa, lo único que se requiere es una ligera familiaridad con el sistema numérico binario. Recordar que cada dígito decimal es representado por cuatro dígitos binarios cuyos pesos están en el orden 8-4-2-1. Ejemplo. Convertir el número 41510 a BCD natural. 4 1 5 0 1 0 0 0 0 0 1 0 1 0 1 Entonces 41510 corresponde al 0100 0001 0101BCD Ejemplo. Convertir el número 10010101BCD (BCD natural) a decimal. 0 1 0 0 0 0 0 1 9 5 Por lo tanto 10010101BCD corresponde al 95 en base 10 (9510 ) Al hacer una comparación entre BCD y binario común, es importante darse cuenta que un número BCD no es lo mismo que un número binario común. Un código binario común toma el número decimal completo y lo representa en binario, mientras que el código BCD convierte cada dígito decimal a binario en forma individual. Para ilustrar, tome el número 137 y compare las representaciones binarias común y codificada en BCD: 13710 = 10001001 13710 = 0001 0011 0111 Binario BCD El código BCD requiere 12 bits mientras que el código binario común requiere sólo 8 bits para representar 137. Es siempre verdadero que el código BCD para un número decimal dado requiere más Curso Electrotecnia VPG/1.37 Capítulo I. Representación de la Información bits para código que el código binario común. Esto es porque BCD no usa todos los grupos posibles de 4 bits, como se señaló antes y es por consiguiente algo ineficiente. La principal ventaja del código BCD es la facilidad relativa para convertir a y desde decimal. Sólo se requiere recordar los grupos codificados de 4 bits para los dígitos decimales del 0 al 9. Esta facilidad de conversión es especialmente importante desde el punto de vista de circuitos, porque en un sistema digital son los circuitos lógicos los que ejecutan las conversiones a y desde decimal. BCD se usa en máquinas digitales siempre y cuando se aplique información digital, ya sea como entradas o mostradas como salidas. Los voltímetros digitales, contadores de frecuencia y relojes digitales usan todos BCD, porque despliegan la información de salida en decimal. Las calculadoras electrónicas usan BCD porque los números de entrada vienen en decimal vía el teclado y los números de salida son mostrados en decimal. BCD normalmente no se usa en computadores digitales modernos de alta velocidad, en aquellas actividades relacionadas con procesamiento. Primero, como ya fue señalado, el código BCD para un número decimal dado requiere más bits que el código binario directo y es por consiguiente menos eficiente. Esto es importante en computadoras digitales porque el número de posiciones de memoria donde estos bits pueden ser almacenados es limitado. Segundo, los procesos aritméticos para números representados en código BCD son más complicados que en binario ordinario y requieren, para su implementación, de circuitos más complejos. Los circuito más complejos contribuyen a una disminución en la velocidad a la cual tienen lugar las operaciones aritméticas. Las calculadoras que usan BCD son, por consiguiente, considerablemente más lentas en su operación, que las computadoras. Tabla 18. Propiedades del código BCD Natural Propiedad BCD Natural Ponderado Distancia de código Continuo Cíclico Denso Autocomplementario Si 1 NO NO NO NO Características del BCD natural: Los números resultantes NO son posicionales. La aritmética BCD es más complicada, puesto que el acarreo y borrow no se propagan en igual forma. Fácil de convertir de BCD a decimal. Para números con signo ⇒ otro dígito, puesto que la longitud de la palabra de un computador, generalmente es una potencia de dos y no de la forma 4n + 1 ⇒ se necesitarán 3 bits extra. Las operaciones aritméticas deben realizarse en una combinación de las reglas binarias para operaciones con dígitos como unidades y reglas decimales para los acarreos. Curso Electrotecnia VPG/1.38 Capítulo I. Representación de la Información b) Código BCD ponderado Aiken 2-4-2-1. Otro código BCD ampliamente usado en computadores es el código 2-4-2-1, el cual se muestra en la tabla 19: Tabla 19. Código BCD Aiken 2421 BCD Aiken Decimal Peso 2 4 2 1 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 1 0 1 1 6 1 1 0 0 7 1 1 0 1 8 1 1 1 0 9 1 1 1 1 En este caso, el dígito más significativo de la representación de 4 bits tiene un peso de 2 en vez de 8 como en el BCD natural. La ventaja principal del código 2-4-2-1 es su autocomplementación. Un código tiene la propiedad de ser autocomplementario si la suma de dos números cualesquiera que den por resultado la base menos uno (complemento a r-1) son uno el complemento del otro. Y puesto que un método de sustracción en computadores digitales usa el método de sumar al minuendo el complemento del sustraendo, la característica del autocomplemento es bastante útil. La autocomplementación de este código puede observarse con algunos ejemplos. En base 10, el complemento a 9 de 1 es 8 (ya que 8 + 1 = 9) y en la representación BCD 2-4-2-1 tenemos que 1 = 0001 y 8 = 1110, o sea, el complemento a 1 de 0001 es 1110. En general, la combinación correspondiente al complemento a nueve de n, es decir 9 - n, se obtiene invirtiendo la combinación correspondiente a n, es decir cambiando los ceros por unos y viceversa. Ej.: si n = 4, entonces tenemos que 9 – 4 = 5, luego como la combinación para 4 es 0 1 0 0, su complemento es 1 0 1 1 que corresponde a la combinación para 5. Ejemplo. Convertir 0100 1110, codificado en BCD2-4-2-1 a decimal 0 1 0 0 1 1 1 0 Entonces, 0100 11102-4-2-1 corresponde a 4810 4 8 Ejemplo. Convertir 34210 en BCD2-4-2-1 3 4 2 0 0 1 1 0 1 0 0 0 1 0 1 Entonces 34210 corresponde al 0011010001012-4-2-1 Tabla 20 Propiedades del código Aiken 2421 Curso Electrotecnia Propiedad Aiken 2421 Ponderado Distancia de código Continuo Cíclico Denso Autocomplementario Si 1 NO NO NO a 9 VPG/1.39 Capítulo I. Representación de la Información c) Código BCD ponderado Aiken 5-4-2-1. Otro código BCD ampliamente usado en computadores es el código 5-4-2-1, el cual se muestra en la tabla 21: Tabla 21. Código BCD Aiken 5421 BCD 5421 Decimal Peso 5 4 2 1 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 1 0 0 0 6 1 0 0 1 7 1 0 1 0 8 1 0 1 1 9 1 1 0 0 En este caso, el dígito más significativo de la representación de 4 bits tiene un peso de 5 en vez de 8 como en el BCD natural. El código Aiken 5421, al igual que el código Aiken 2421 asigna un bit cero al bit de mayor peso en los cinco primeros símbolos fuente (del 0 a 4) y un bit uno a los cinco últimos símbolos fuente (del 5 al 9), tomando el resto de los bits el valor adecuado para que la suma de los pesos de la palabra código sea el número decimal. Así, la representación de estos códigos es única. Tabla 22 Propiedades del código Aiken 5421 Propiedad Aiken 5421 Ponderado Distancia de código Continuo Cíclico Denso Autocomplementario Si 1 NO NO NO NO Resumen de códigos BCD ponderados Tabla 23. Códigos BCD pesados más usados Aiken Natural Decimal 2421 5421 8 4 2 1 2 4 2 1 5 4 2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 2 0 0 1 0 0 0 1 0 0 0 1 3 0 0 1 1 0 0 1 1 0 0 1 4 0 1 0 0 0 1 0 0 0 1 0 5 0 1 0 1 1 0 1 1 1 0 0 6 0 1 1 0 1 1 0 0 1 0 0 7 0 1 1 1 1 1 0 1 1 0 1 8 1 0 0 0 1 1 1 0 1 0 1 9 1 0 0 1 1 1 1 1 1 1 0 Curso Electrotecnia 1 0 1 0 1 0 0 1 0 1 0 Peso VPG/1.40 Capítulo I. Representación de la Información d) Código BCD no ponderado Exceso-3 El código exceso-3 está relacionado con el código BCD y usado a veces en lugar de él, porque posee ventajas en ciertas operaciones aritméticas. El código exceso-3 para un número decimal, se obtiene, de la misma manera que en BCD excepto que se añade 3 (se suma) a cada dígito decimal antes de codificarlo en binario. Por ejemplo, para codificar el número decimal 4 en el código xceso-3, debemos primero añadir 3 para obtener 7. Luego el 7 se codifica en código binario equivalente de 4 bits para obtener 0111. Como otro ejemplo, convirtamos 34210 a su representación en código exceso-3: 3 +3 6 4 +3 7 2 +3 5 Entonces 34210 corresponde al 0110 0111 0101Exceso-3 0 1 1 0 0 1 1 1 0 1 0 1 La siguiente tabla muestra las listas para las representaciones BCD y exceso-3 para los dígitos decimales. Note que ambos códigos usan sólo 10 de los 16 posibles grupos codificados de 4 bits. El código exceso-3, sin embargo, no usa los mismos grupos codificados. Para exceso-3, los grupos codificados, no válidos son 0000, 0001, 0010, 1101, 1110 y 1111. Tabla 24. Códigos BCD natural y Ex_3 Decimal BCD natural Exceso -3 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 1 0 0 2 0 0 1 0 0 1 0 1 3 0 0 1 1 0 1 1 0 4 0 1 0 0 0 1 1 1 5 0 1 0 1 1 0 0 0 6 0 1 1 0 1 0 0 1 7 0 1 1 1 1 0 1 0 8 1 0 0 0 1 0 1 1 9 1 0 0 1 1 1 0 0 El código BCD Exceso-3 tiene dos ventajas interesantes, que en muchos casos justifica su empleo. 1. Es autocomplementario. 2. Todos los números (incluido el cero), tienen por lo menos un 1, es decir un bit significativo. 3. Al ser autocomplementario permite ejecutar más fácilmente las operaciones de resta aplicando el procedimiento del complemento a 9 Tabla 25 Propiedades del código BCD Exceso-3 Curso Electrotecnia Propiedad BCD Natural Ponderado Distancia de código Continuo Cíclico Denso Autocomplementario NO 1 NO NO NO a 9 VPG/1.41 Capítulo I. Representación de la Información Ejemplos de conversión de números BCD. La conversión de un número decimal a código BCD se realiza expresando cada dígito decimal mediante la combinación binaria correspondiente del código BCD elegido. La conversión de un número BCD a un número decimal se realiza dividiendo el número, a partir de la coma engrudos de cuatro bits exprtesando en cada grupo su valor decimal correspondiente delcódigo BCD elegido. Ejemplo. La representación del número decimal 37,6 en el código BCD natural es: 3 7 , 6 0 0 1 1 0 1 1 1 , 0 1 0 1 Ejemplo. Representar el número decimal 127,25 en los códigos BCD natural, Aiken 2421, exceso-3 y en binario natural. Solución. En la tabla 26 se muestra la representación en los cuatro códigos. Tabla 26. Código Palabras de código BCD Natural 0001 0010 0111,0010 0101 BCD Aiken 2421 0001 0010 1101,0010 1011 BCD Exceso-3 0100 0101 1010,0101 1000 Binario Natural 111111111,01 Ejemplo. Determinar el número decimal del código: 0100 0101 1000,0011, cuando está expresado en: BCD natural, Aiken 2421, exceso-3 y binario natural. Solución. Solución. En la tabla 27 se muestra la representación en los cuatro códigos. Tabla 27. Código Palabras de código BCD Natural 458,3 BCD Aiken 2421 xxxxxx BCD Exceso-3 125,0 Binario Natural 1112,1875 En el caso de la obtención del número decimal del código 0100 0101 1000,0011 expresada en BCD Aiken 2421, las palabras de código 0101 y 1000 no pertenecen al alfabeto de dicho código por lo que este punto del problema no tiene solución, indicándose este hecho mediante una línea de x. Curso Electrotecnia VPG/1.42 Capítulo I. Representación de la Información 1.6.7.4. Códigos progresivos. Los códigos binarios progresivos son aquellos cuyas palabras consecutivas son adyacentes, es decir, si dos cualesquiera de sus palabras de código solo difieren en un bit. Ejemplo, las palabras de código 1100 y 1101 son adyacentes. Si además, la primera y última palabras de código son también adyacentes, el código se llama cíclico. La más interesante aplicación de estos códigos está en la conversión de magnitudes analógicas a digitales: por ejemplo en la codificación de las posiciones sucesivas de uno o más objetos, problema que se presenta en instalaciones industriales. Efectivamente, las posiciones sucesivas de un objeto pueden medirse utilizando una placa, una cinta perforada o un disco codificado con un dibujo en binario. En la figura 3. se muestra una placa codificada en código binario natural; las a b partes sombreadas representan las zonas c conductoras y las partes claras son zonas d aislantes. Cuando la placa se mueve en el sentido de la flecha, las lámparas 0 1 2 proporcionan una señalización binaria de 3 las posiciones 1, 2, 3,……n de esta base; las lámparas pueden sustituirse por diferentes elementos de control que determinan, por ejemplo el funcionamiento del carro de una máquina herramienta, de un motor de accionamiento. Fig. 3. Placa codificada en binario natural. 4 5 6 7 8 9 10 Supongamos que la placa se encuentra en la posición 7 y se mueve a la posición 8. En la posición 7 inicial, las lámparas encendidas expresan la posición binaria 0111 (que corresponde al 7 en base 10); cuando se realiza el cambio a la posición 8, las lámparas indican la posición binaria 1000 (que corresponde a 8 en base 10). Nótese que para que se produzca este cambio, los cuatro bits que constituyen el código, ha de cambiar simultáneamente. Por la inevitable imprecisión que tiene todo elemento mecánico, resulta prácticamente imposible que el cambio de los cuatro bits se produzca simultáneamente; lo que sucede en realidad es que el cambio de realiza entre combinaciones intermedias. Una secuencia posible sería la siguiente: Posición inicial Posibles transiciones Posición final Código binario 0111 0010 0110 1010 1000 Decimal 7 2 6 10 8 Dada la gran velocidad con que trabajan los equipos digitales, aun cuando los estados transitorios son instantáneos, la información falsa proporcionada por las transiciones, sería procesada con las correspondientes anomalías en el funcionamiento de los equipos correspondientes. En estos casos son útiles los códigos progresivos que se estudiarán a continuación y que se caracterizan, como se señaló, porque el paso de una combinación a la siguiente (anterior o posterior) solamente cambia el valor de un bit, evitándose de esta forma las transiciones intermedias. Curso Electrotecnia VPG/1.43 Capítulo I. Representación de la Información a) Código Gray. Como se ha señalado, el código Gray es un código progresivo y no ponderado, significando que las posiciones de los bits en los grupos codificados no tienen un peso específico asignado. Debido a esto, el código Gray no es apropiado para operaciones aritméticas, pero encuentra aplicaciones en dispositivos de entrada/salida y en algunos tipos de convertidores analógicos a digital. Al código progresivo también se le conoce como perteneciente a una clase de códigos llamados códigos de cambios mínimos, por el hecho que sólo cambia un bit en el grupo codificado cuando se va de un paso al siguiente. El código Gray también recibe el nombre de Código reflejado, debido al reflejo que se debe realizar en las palabras de código al construirlo. La formación del código Gray de n bits se realiza por reflexión del código de n-1 bits, repitiendo simétricamente las combinaciones de este y añadiendo a la izquierda un bit que será cero en las 2n-1 primeras palabras de código (primera mitad de las filas) y 1 en las 2n-1 filas restantes (última mitad de las filas), como puede verse en la tabla XX Tabla 28. Códigos Gray de 1, 2, 3 y 4 bits 1 bit 2 bits 3 bits 0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 4 bits 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 0 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 Los símbolos sombreados corresponden el reflejo de los que se encuentran inmediatamente arriba y la columna más significativa se forma colocando 0’s a las primeras 2n-1 filas y unos a las 2n-1 siguientes. Por ejemplo el código de 4 bits se forma copiando el código de tres bits, reflejándolo, y colocando un 0 como bits más significativo a las primeras 8 filas y colocando un 1 a las 8 filas restantes. Para construir un código Gray a partir del código BCD natural, se procede de la siguiente forma: 1. El Bit más significativo (MSB) en el código Gray Gn-1 y en el código Binario natural Bn-1 son idénticos. 2. El resto de los bits del código Gray, Gi se obtienen sumando de izquierda a derecha cada par adyacente de los bits en código binario Bi y Bi+1, siendo su resultado el siguiente bit del código Gray, descartando los acarreos; o mediante la función lógica XOR (OR exclusivo). Esta operación da como resultado un uno lógico cuando sus operandos son distintos y un cero lógico cuando sus operandos son iguales. Gi = Bi ⊕ Bi +1 Curso Electrotecnia Donde: 0 ≤ i ≤ n − 2; Bn −1 = Gn −1 Si Bi ≠ Bi +1 entonces Si Bi = Bi +1 entonces Gi = 1 y Gi = 0 VPG/1.44 Capítulo I. Representación de la Información Ejemplo. Convertir el número binario 1110101 a código Gray. B6 B5 B4 B3 B2 B1 B0 1 1 1 0 1 0 1 + + + + + + 1 G1 1 1 0 0 1 1 G6 G5 G4 G3 G2 G0 Para convertir un código Gray a código BCD natural, se procede de la siguiente forma: 1. El Bit más significativo (MSB) en el código Binario natural Bn-1 y en el código Gray, Gn-1 son idénticos. 2. El resto de los bits del código binario natural Bi se obtienen sumando de izquierda a derecha a cada bit del código generado Bi+1, el bit en código Gray Gi de la siguiente posición adyacente y descartando los acarreos; o mediante la función lógica XOR (OR exclusivo) entre los dígitos señalados. Bi = Bi +1 ⊕ Gi 0 ≤ i ≤ n − 2; Bn −1 = Gn −1 Si Bi +1 ≠ Gi entonces Si Bi +1 = Gi entonces donde Bi = 1 y Bi = 0 Ejemplo conversión de 111110 en código gray a código binario natural. G5 1 G4 1 G3 1 G2 0 G1 1 G0 0 + + + + + 1 0 1 1 0 0 B5 B4 B3 B2 B1 B0 G5 es el MSB ⇒ B5 = G5 = 1; B4 = B5 ⊕ G4 = 1 ⊕ 1 = 0; B3 = B4 ⊕ G3 = 0 ⊕ 1 = 1; B2 = B3 ⊕ G2 = 1 ⊕ 0 = 1; B1 = B2 ⊕ G1 = 1 ⊕ 1 = 0; B0 = B1 ⊕ G0 = 0 ⊕ 0 = 0 La aplicación que hace corresponder a cada símbolo del alfabeto fuente Fi con una palabra de código se denomina codificación. Y al proceso inverso mediante el cual se obtiene un símbolo del alfabeto fuente Fi, conociendo la correspondiente palabra de código se denomina decodificación. En el ejemplo anterior, mesa se codifica con la palabra de código δ, e inversamente, la decodificación de la palabra de código δ es mesa. Tabla 29. Propiedades del código BCD Exceso-3 Curso Electrotecnia Propiedad BCD Natural Ponderado Distancia de código Continuo Cíclico Denso Autocomplementario NO 1 SI SI SI NO VPG/1.45 Capítulo I. Representación de la Información Características del código Gray. Todos los códigos Gray poseen las siguientes características comunes: 1. Si n es el numero de bits, la expresión del mayor número decimal que puede representarse con un código Gray es: N = 2n – 1. Por ejemplo, un código Gray de n = 4 bits puede expresar hasta el número decimal N = 24 -1 = 16 – 1 =15 2. Si N es el número de bits, la cifra decimal 0 está representada por n ceros. Por ejemplo en un código Gray de 4 bits, el 0 está representado por los bits 0000. 3. Si N es el número de bits, la expresión del mayor número decimal que se puede representar en el código Gray, está constituida por un 1 seguido de (n – 1) ceros. Es decir, que en un código Gray de 4 bits el myor número decimal posible, el 15 se representará como 1000. Por consiguiente se pasa de este número máximo a 0 por el cambio de un solo dígito (de 1000 se pasa a 0000). Se dice que el código Gray es cíclico. Esta propiedad permite construir escalas codificadas circulares, cerradas sobre ellas mismas y destinadas a ser montadas sobre ejes de rotación. En la figura 4 se ha representado esquemáticamente una de estas escalas para un código Gray de 4 bits: a partir de las posiciones iniciales a, b, c, d y desplazando el disco hacia la izquierda, las sucesivas posiciones codificadas 1, 2, 3,….15, solamente difieren en un bit y, además, de la posición 15 a la posición 0 se pasa por cambio de un solo bit. Nótese, además, que con el desplazamiento del disco hacia la derecha, se mantienen tambien las características anteriores. El carácter cíclico de los códigos Gray los hace muy adecuados para la programación automática de dispositivos circulares (por ejemplo motores eléctricos). 6 5 7 8 4 9 3 10 2 a 11 b c 1 0 12 d 13 14 15 Fig. 4 Disco codificado en código Gray de 4 bits 4. El código Gray es reflejado, como se mostró anteriormente. 5. Todos los códigos Gray tienen la propiedad de que sus valores de paridad par corresponden a números decimales pares y sus valores de paridad impar corresponden a decimales impares. Pòre ejemplo el número decimal 11 (impar) le corresponde la palabra de código 1110 (paridad impar). Esta característica es muy interesante para la comprobación y el control de los números expresados en código Gray. 6. Los códigos Gray son no ponderados, es decir que el número decimal correspondiente a un valor de código no se obtiene por la suma de sus dígitos. Curso Electrotecnia VPG/1.46 Capítulo I. Representación de la Información 1.6.7.5. Códigos alfanuméricos (Codificación de símbolos) Muchas aplicaciones requieren la codificación de letras y símbolos, además de números, es esta la razón de la existencia de los códigos alfanuméricos. Para representar nombres en forma binaria es necesario tener un código binario para el alfabeto. El mismo código binario puede representar números decimales y algunos otros caracteres especiales. Un código alfanumérico es una correspondencia entre un alfabeto binario, de un número finito de elementos y los 10 dígitos decimales, las 26 letras del alfabeto y ciertos símbolos especiales, como: $, #, ), ., &, etc. Así, se tiene que el número total de elementos en un alfabeto alfanumérico es mayor que 36, de tal modo que debe ser codificado con un mínimo de 6 bits (26= 64 ). Los códigos con que se representa la información varían tanto en la cantidad de bits que se utilizan para definir un carácter individual, como en la asignación de patrones para cada carácter en particular. El alfabeto alfanumérico (formado por números, letras y símbolos) es conocido también como alfabeto externo debido a que este es el conjunto de símbolos que usa el computador para comunicarse con el mundo exterior, con el ser humano. Por el contrario, con el nombre de alfabeto interno se distingue al conjunto de símbolos formados por 0`s y 1`s con los cuales el computador representa y procesa información internamente. El número de caracteres en el alfabeto externo, determina el largo del código. Los códigos más comunes utilizados en computadores es de 6 y 8 bits. Los códigos de 7 bits son utilizados en comunicaciones y no han sido adoptados para uso en los computadores debido a su número de bits (7) poco relacionados con las demás cantidades utilizadas dentro del computador, usualmente potencias de 2. La elección de la correspondencia entre alfabetos, no es una decisión arbitraria. Hay pocas razones para que la codificación de A sea 1000001 en vez de 1000000. Hay sin embargo, ciertos criterios que deben ser considerados cuando se diseña un código, aún cuando, en algunos casos son conflictivos. La importancia de consideraciones individuales depende de la aplicación: el criterio esencial para una aplicación puede ser irrelevante en otras aplicaciones. Las siguientes son consideraciones aplicables a códigos para representación de caracteres. Las palabras de código de dos letras adyacentes alfabéticamente deberían ser adyacentes. A → 100 0001 B → 100 0010 Este hecho simplifica el procesamiento de cadenas de caracteres o textos Los códigos de los dígitos 0 a 9 deberían estar ligados a su representación posicional binaria, de tal forma que se simplifique la conversión entre el código y su valor. Los códigos de símbolos de operadores aritméticos y símbolos relacionados deberían ser adyacentes para simplificar su reconocimiento. El código de todos los símbolos debería tener el mismo número de bits, de tal forma de simplificar su almacenamiento e interpretación. El código debería ser lo suficientemente amplio para incluir todos los símbolos deseables y que aún sobren códigos para futuras ampliaciones. El código debería ser modular. En casos en que el costo de transmisión es importante, los códigos de los símbolos más comunes, deben ser los más cortos (para el caso de largo variable). Por ejemplo: Código Morse (Ese criterio no es aplicable a computadores). Los códigos deberían estar diseñados para fácil implementación de codificación y decodificación. Curso Electrotecnia VPG/1.47 Capítulo I. Representación de la Información a) Código Baudot. Uno de los códigos más antiguos (fue creado en el siglo 19) para la comunicación de datos es el denominado código Baudot o código de 5 bits en el que sólo hay 32 combinaciones posibles de caracteres, sin embargo, también hay dos funciones que se conocen como letras y cifras. Cuando se utiliza una de estas dos funciones, el equipo se posiciona de manera que todos los caracteres que se teclean después de tal activación tienen configuración diferente de la que tenían antes y con esto se eleva a 58 la cantidad de combinaciones de caracteres válidos, apenas lo necesario para la comunicación simplificada de datos. En una versión conocida como Internatinal Badout, se tiene un sexto bit que se utiliza para funciones de paridad. El código Badout se utilizó en los primeros equipos de teletipos y en los circuitos de comunicación de muy baja velocidad (150 bits por segundos o menos). El mecanismo del teletipo contiene un grupo de switches que pueden ser abiertos y cerrados por la presión de una tecla, este switch puede ser trasladado a una representación binaria, 0 = abierto y 1 = cerrado. Tabla 30 Estructura de código Badout. Minúsculas A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Letras (cambio a minúsculas) Cifras (cambio a mayúsculas) Espacio Retrono de carro Alimentación de línea Espacio en blanco Nota • representa 1 Blanco representa 0 Mayúsculas 1 2 ? : $ 3 ! & • • • 8 ‘ ( ) . , 9 0 1 4 Campana 5 7 ; 2 / 6 “ • • • • 3 4 5 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • La información que se transmite de un lugar a otro, utilizando código Badout se puede hacer vía cinta perforada en la que las perforaciones representan 1`s y los círculos no perforados representan 0`s. Curso Electrotecnia VPG/1.48 Capítulo I. Representación de la Información b) Código de 6 niveles. La representación de letras y números en este código es la del código BCD natural. Los dos bits más significativos (b6 y b5) indican que los próximos 4 bits representan cualquier número (b6 = 0 y b5 = 0), el primer tercio del alfabeto cuando b6 = 1 y b5 = 1, el 2do. tercio cuando b6 = 1 y b5 = 0 y el tercer tercio es b6 = 0 y b5 = 1. Cada grupo está en BCD ascendente (0 a 9), para incrementar valores numéricos o letras del alfabeto se avanza progresivamente desde el 1ro. al último. Este código de 6 niveles comúnmente es usado en computadores, y cuando se expande a 7 bits provee el bit de paridad. Encontró su primera aplicación en sistemas de datos con cintas de papel y cintas magnéticas. La tabla 31. muestra el código alfanumérico BCD. Tabla 31 Estructura del código alfanumérico BCD de 6 niveles Zona b6 b5 0 0 SP 1 2 3 4 5 6 7 8 9 ∅ #= @ : 〉 0 1 δ / S T U V W X Y Z , %( γ \ 1 0 J K L M N O P Q R ! $ * [ ; Δ 1 1 & + A B C D E F G H I ? . ) ] 〈 ≠ b4 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 Digito b3 b2 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 b1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 c) Código de 7 niveles (ASCII) El uso de 7 posiciones de dato, da como resultado un código que tiene un total de 128 combinaciones. Comúnmente usado en control digital de máquinas industriales. Código de control numérico de 7-niveles (expandible a 8- niveles, si es usado el bit de paridad). Se tienen combinaciones que no son usadas. Este código es expandible a 8 bits, para tener bit de paridad en corrección de errores. Este código de 7 niveles, expandible a 8 niveles es llamado American Standard Code for Information Interchange (ASCII). Los 128 caracteres representables poseen una única combinación. En la actualidad se usan numerosas variaciones del código ASCII, pero todas son compatibles. La tabla 32. muestra el código ASCII. Curso Electrotecnia VPG/1.49 Capítulo I. Representación de la Información Tabla 32 Código ASCII (American Standard Code for Information Interchange). Dígito Zona 7 6 5 4 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 SPACE 0 @ P 3 2 1 0 0 0 0 0 NUL DLE 0 1 1 0 0 1 1 1 0 0 1 SOH DC1 ! 1 A Q a q 0 0 1 0 STX DC2 " 2 B R b R 0 0 1 1 ETX DC3 # 3 C S c s 0 1 0 0 EOT DC4 $ 4 D T d t 0 1 0 1 ENQ NAK % 5 E U e u 0 1 1 0 ACK SYN 6 F V f 0 1 1 1 BEL ETB ' 7 G W g w 1 0 0 0 BS CAN ( 8 H X h x 1 0 0 1 HT EM ) 9 I Y i y 1 0 1 0 LF SUB * : J Z j z 1 0 1 1 VT ESC + ; K [ k { 1 1 0 0 FF FS , < L \ l | 1 1 0 1 CR GS - M ] m } 1 1 1 0 SO RS . > N ↑ n ∼ 1 1 1 1 SI US / ? O - o del Zona NUL SOH IXT ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 6 5 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 Dígito 4 Mnemónico y significado Nulo Inicio de encabezado Inicio de texto Fin de texto Fin de transmisión Solicitud Reconocimiento Campana Retroceso Tabulación horizontal Avance de línea Tabulación vertical Avance de hoja Retorno de carro Anulador de cambio de mayúsculas Fijador de cambio de mayúsculas Curso Electrotecnia 1 0 0 1 p 0 7 1 0 0 0 3 DEL DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US DEL 2 1 0 Mnemónico y significado Escape del enlace de datos Control de dispositivo 1 Control de dispositivo 2 Control de dispositivo 3 Control de dispositivo 4 Reconocimiento negativo Síncrono libre Fin de bloque de transmisión Cancelar Fin del medio Sustituir Escape Separador de archivo Separador de grupo Separador de registro Separador de unidad Borrar VPG/1.50 Capítulo I. Representación de la Información d) Código de 8 niveles EBCDIC El nombre de este código viene de Extended Binary Coded Decimal Interchange Code. Una ventaja de este código sobre los otros códigos vistos, es que la identificación de símbolos es hecha fácilmente por la investigación solamente de los 2 dígitos más significativos. El código EBCDIC es usado cuando la transmisión de datos y recepción entre dispositivos, necesita interfaz con un computador que opera predominantemente en modo BCD. Extendiendo este código a nueve niveles se puede obtener el código con bit de paridad. La tabla 33. muestra el código EBCDIC. Tabla 33 Código EBCDIC (Extended Binary-Coded-Decimal Interchange Code). 7 Zona6 Dígito 5 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 3 2 1 0 0 0 0 NUL DLE DS 0 0 0 1 SOH DC1 SOS 0 0 1 0 STX DC2 FS 0 0 1 1 ETX TM 0 1 0 0 PF RES BYP PN 0 1 0 1 HT NL LF 0 1 1 0 LC BS 0 1 1 1 DEL IL 1 0 0 0 1 0 0 1 1 0 1 0 SMM CC SM 1 0 1 1 VT CU1 CU2 1 1 0 0 FF IFS 1 1 0 1 CR IGS ENQ 1 1 1 0 SO IRS ACK 1 1 1 1 SI IUS BEL 0 4 0 1 0 0 0 1 0 1 SP & 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0 A J s B K S 2 t C L T 3 d m u D M U 4 RS e n v E N 5 ETB UC f o w F O W 6 ESC EOT g p x G P X 7 CAN h q y H Q Y 8 EM i r z I 9 SYN C ! CU3 . $ . # DC4 < * % @ NAK ( ) - ’ + : > = | ¬ ? “ SUB Zona 0 Curso Electrotecnia 0 1 1 0 1 a j b k c l R 1 V Z : Dígito 2 3 4 5 6 7 VPG/1.51 Capítulo I. Representación de la Información e) Código Hollerith Letras, números y algunos símbolos pueden ser representados por ciertas combinaciones de perforaciones en una tarjeta especial. El código mas usado en tarjetas perforadas es el código Hollerith. Cada una de las 80 columnas acepta un dígito, letra o símbolo. Posiciones perforadas son arreglos de líneas horizontales de 12 filas.(10 dígitos,0 a 9 y 2 líneas más, 11 y 12). Así los dígitos del 0 al 9 necesitan una única perforación, los caracteres alfabéticos y caracteres especiales requieren más de una perforación. Cuando es leída una tarjeta perforada, cada columna es investigada separadamente. El código Hollerith para tarjetas perforadas es actualmente un código de 12 niveles. Curso Electrotecnia VPG/1.52