SISTEMAS DIGITALES Y REPRESENTACIÓN DE LA INFORMACIÓN 1. Representación de la información en los sistemas digitales El término digital se deriva de la forma en que los ordenadores realizan las operaciones: contando dígitos. Durante muchos años, las aplicaciones de la electrónica digital se limitaba a los sistemas informáticos. Hoy en día, la tecnología digital tiene aplicación en prácticamente todas las áreas. 1.1 Magnitudes analógicas y digitales Una magnitud analógica es aquella que toma valores continuos. Por ejemplo, la temperatura varía dentro de un rango continuo de valores. A lo largo del día, la temperatura no varía de 20ºC a 25ºC de forma instantánea sino que alcanza todos los infinitos valores que hay en ese intervalo. Uno de los problemas que tenemos es que cualquier “ruido” (interferencia), hace que los datos sean poco fiables. Otros inconvenientes: - Almacenar - Procesar - Transmitir Una magnitud digital es aquella que toma un conjunto de valores discretos (finitos). Por ejemplo, podríamos ir tomando la temperatura cada 5 minutos. 1.2 Representación de la información digital La electrónica digital utiliza sistemas y circuitos en los que sólo existen dos posibles estados: Alto (HIGH) y Bajo (LOW). Estos estados se pueden representar de diferentes formas: - niveles de tensión (el más habitual) - niveles de corriente - interruptores abiertos o cerrados - lámparas encendidas o apagadas - … 1 1.2.1 Dígitos binarios El sistema de numeración de dos estados se denomina binario, y los dos dígitos que emplea son el 0 y el 1. Un dígito binario se denomina bit. Si asociamos el estado Alto=1 y Bajo=0 estamos trabajando con lógica positiva que es la que utilizaremos a lo largo del curso. Los grupos de bits, llamados códigos, se utilizan para representar: - números - símbolos - caracteres alfabéticos - instrucciones - cualquier otro tipo de información 1.2.2 Niveles lógicos Las tensiones que se utilizan para representar los 1´s y los 0´s reciben el nombre de niveles lógicos. Como hemos dicho antes, a lo largo de este curso vamos a trabajar con lógica positiva, es decir, asociamos el estado Alto con el 1 y el Bajo con el 0. Decíamos también que los estados se pueden representar de diferentes formas, pero el más habitual y el que usaremos en este curso es el de asociarlo a niveles de tensión. Supongamos entonces que el 1 lógico equivale a 5V (depende también de la familia que estemos usando), y el 0 lógico equivale a 0V. Esto sería el caso ideal, ya que en la práctica, el tipo de circuito, las interferencias, … hacen que el 1 lógico se asigne a un intervalo de tensión que puede ir desde 2V a 5V, y el 0 lógico se asigne a un intervalo de tensión que puede ir desde 0V a 0,8V. En este curso vamos a considerar sólo el caso ideal: 1 = 5V y 0 = 0V. 1.2.3 Formas de onda digital Las señales digitales consisten en niveles de tensión que varían entre los estados alto y bajo. Se denomina impulso positivo cuando la tensión pasa de su estado a nivel bajo hasta el nivel alto, y luego retorna al nivel bajo. 1 0 Se denomina impulso negativo cuando la tensión pasa de su estado a nivel alto hasta el nivel bajo, y luego retorna al nivel alto. 1 0 La mayoría de las señales que podemos encontrar en los sistemas digitales se componen de series de impulsos (algunas veces llamados también trenes de impulsos) y pueden clasificarse en periódicas y no periódicas. 2 Un tren de impulsos periódico es aquel que se repite a intervalos de tiempo fijos, este intervalo de tiempo fijo se denomina periodo (T). La frecuencia (f) es la velocidad a la que se repite (f = 1/T) y se mide en hertzios (Hz). T1 T2 T3 Periodo = T1 = T2 = T3 = … Un tren de impulsos no periódico es aquel que no se repite a intervalos de tiempo fijos, y puede estar compuesto por impulsos de distintos anchos y/o impulsos que tienen intervalos diferentes de tiempo entre ellos. No periódico La información binaria que manejan los sistemas digitales se transmite a través de trenes de impulsos que representan secuencias de bits. En muchos sistemas digitales, todas las señales se sincronizan con una señal de tiempo denominada reloj. El reloj es una señal periódica en la que su periodo equivale a la duración del bit. Cronograma o diagrama de tiempos es una gráfica de ondas digitales que muestra como van variando las ondas a través del tiempo. reloj A 1 0 1 0 0 1 B 1 1 0 0 1 1 En el primer intervalo de tiempo, tanto A como B valen 1. En el siguiente, B mantiene su valor pero A pasa a valer 0. En el siguiente, A vuelve a valer 1 y B pasa a valer 0, … Cronograma 3 2. El sistema de numeración binario 2.1 Sistemas de numeración Todos estamos familiarizados con el sistema de numeración decimal porque usamos los números decimales cada día. El sistema binario es simplemente otra forma de representar magnitudes. Este sistema es menos complicado que el sistema decimal ya que sólo tiene dos dígitos. El sistema decimal con sus diez dígitos es un sistema en base 10, el sistema binario con sus dos dígitos es un sistema en base 2. Los dos dígitos binarios (bits) son 1 y 0. Además de estos dos sistemas de numeración también estudiaremos otros dos que nos van a ser muy útiles, el sistema de numeración octal (base 8) y el hexadecimal (base 16). Como es fácil construir circuitos digitales que reconozcan y manipulen sólo 0´s y 1´s , nuestro objetivo en el diseño de sistemas es realizar todas las operaciones usando únicamente estos dos dígitos. En consecuencia, todos los números y datos de un computador tienen que representarse en esta forma binaria. Los datos que podemos encontrar en un sistema digital se pueden clasificar en 3 categorías generales que incluyen: 1. Números que se usan en operaciones aritméticas. 2. Letras del alfabeto que se usan en procesamiento de datos. 3. Una serie de símbolos discretos para diversos usos. Estos tres tipos de datos se representan en computadores en código binario. Los sistemas de numeración que estudiaremos en esta sección tienen una estructura de pesos, es decir que un mismo dígito tiene diferentes valores dependiendo la posición que ocupe. 2.1.1 Sistema decimal Aunque ya estamos muy familiarizados con este sistema de numeración, nos interesa comprender su estructura de pesos, lo que nos ayudará a entender a los otros sistemas de numeración. Este sistema utiliza diez dígitos (base 10) desde el 0 hasta el 9. Puede expresar cantidades hasta 9 antes de quedarse sin dígitos. Si se desea expresar una cantidad mayor, se usan dos o más dígitos, y la posición de cada uno de ellos dentro del número le dice la magnitud que representa. 105 = 1x102 + 0x101 + 5x100 = 100 + 0 + 5 Peso = 10i, donde i es la posición que ocupa el dígito. 4 Los pesos para los números enteros son potencias positivas de diez que aumentan de derecha a izquierda, comenzando por 100 = 1. Para números fraccionarios, los pesos son potencias negativas de diez que aumentan de izquierda a derecha, comenzando por 10-1 = 0,1. … 102 101 100, 10-1 10-2 10-3 … coma fraccionaria El valor de un número decimal es la suma de los dígitos después de haber multiplicado cada dígito por su peso (como vimos en el ejemplo del 105). 2.1.2 Sistema binario También es un sistema con pesos, donde lo único que varía respecto al decimal es su base. Para contar en binario se hace igual que en decimal con la única diferencia que ahora sólo contamos con dos dígitos (bits), el 0 y el 1. Si se quiere expresar una cantidad mayor hemos de ir añadiendo dígitos. Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 … Binario 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 … Para aprender a contar en binario hay que observar como contamos en el sistema decimal. Empezamos en 0 y contamos hasta 9 antes de quedarnos sin dígitos. Luego comenzamos con otra posición de dígitos (a la izquierda) y contamos desde 10 hasta 99. Es necesaria otra posición para contar desde 100 hasta 999. Y así sucesivamente. En binario es similar: Con un solo bit contamos de 0 a 1. Necesitamos otro bit a la izquierda para contar de 2 a 3. Con el tercer bit podemos contar de 4 a 7. Con el cuarto, de 8 a 15. Y así sucesivamente. 5 El bit más a la derecha es el bit menos significativo: LSB (Least Significant Bit) y tiene un peso de 20 = 1. Los pesos de los respectivos bits crecen de derecha a izquierda según las potencias de 2. … 23 22 21 20 El bit más a la izquierda es el bit más significativo: MSB (Most Significant Bit) y su peso depende del tamaño del número binario. Los números con parte fraccionaria también se pueden representar en binario con pesos que van desde 2-1 hasta 2-n, donde n es el número de bits a partir de la coma fraccionaria. … 22 21 20, 2-1 2-2 2-3 … = … 4 2 1, 0,5 0,25 0,125 0,0625 … coma fraccionaria Recordar: 2-1 = 0,5 2-2 = 0,25 2-3 = 0,125 2-4 = 0,0625 2-5 = 0,03125 2-6 = 0,015625 … Conversión binario a decimal: n-1 ∑ 2i i= -m 1010011100(2 = 29 + 27 + 24 + 23 + 22 = 512 + 128 + 16 + 8 + 4 = 660(10 1001.101(2 = 23 + 20, 2-1 + 2-3 = 8 + 1, 0,5 + 0,125 = 9,625(10 Conversión decimal a binario: Existen principalmente dos métodos: - Suma de pesos Divisiones sucesivas 6 Suma de pesos: - Al número se le resta la mayor potencia de 2 que no lo sobrepase. Sucesivamente, se irá restando a lo que nos quede las potencias de 2 hasta llegar a 0. Se asignará un 1 al peso de las potencias de 2 que hemos utilizado. 9,625(10 = 1001,101(2 Parte entera 9 -8 -> 23 1 -1 -> 20 0 Parte fraccionaria 0,625 -0,5 -> 2-1 0,125 -0,125 -> 2-3 0 En este caso, la parte fraccionaria ha sido exacta pero en la mayoría de los casos esto no ocurre, por lo que tendremos que poner un límite al número de bits que queramos aproximar al igual que ocurre en el sistema decimal. Divisiones sucesivas: Parte entera - El número se divide por dos. - Sucesivamente se irán dividiendo los cocientes por dos hasta que el resto sea 0 o 1. - El último cociente será el MSB. El resto de bits lo formarán todos los restos que hemos ido obteniendo, siendo el LSB el primer resto obtenido. 9 2 LSB 1 4 2 0 2 2 0 1 MSB Parte fraccionaria - El número se multiplica por dos. La parte que queda como entera se extrae como bit. Éste será el MSB. Sucesivamente se irá multiplicando la parte fraccionaria por dos hasta que ésta sea 0 o se llegue al límite de bits. 0,625 x 2 = 1,25 -> 1 (MSB) 0,25 x 2 = 0,5 -> 0 0,5 x 2 = 1,0 -> 1 (LSB) 7 Otro ejemplo: 25,7187(10. Limitar la parte fraccionaria a 6 bits 25,7187(10 = 11001,101101(2 Parte entera Parte fraccionaria 25 -16 -> 24 9 -8 -> 23 1 -1 -> 20 0 25 2 LSB 1 12 2 0 6 2 0 3 2 1 1 MSB 0,7187 -0,5 -> 2-1 0,2187 -0,125 -> 2-3 0,0937 -0,0625 -> 2-4 0,0312 -0,015625 -> 2-6 0,015575 0,7187 x 2 = 1,4374 -> 1 (MSB) 0,4374 x 2 = 0,8748 -> 0 0,8748 x 2 = 1,7496 -> 1 0,7496 x 2 = 1,4992 -> 1 0,4992 x 2 = 0,9984 -> 0 0,9984 x 2 = 1,9968 -> 1 2.1.3 Sistemas octal y hexadecimal Los números binarios largos son difíciles de leer y escribir ya que es fácil omitir o transponer un bit. Puesto que los computadores sólo entienden los 1´s y los 0´s, es necesario emplear estos dígitos cuando se programa en lenguaje máquina. Si, por ejemplo, tenemos que escribir una instrucción de 60 bits existe una probabilidad alta de equivocarnos, así que trabajaremos con otro sistema más sencillo. Una posibilidad sería trabajar en decimal y luego pasarlo a binario, pero hemos visto que la conversión no es directa, así que buscaremos algún sistema donde la conversión sea directa. Solución: Utilizar los sistemas octal y hexadecimal, que al ser potencias de 2, la conversión es muy sencilla. 8 El sistema octal necesita 8 dígitos (base 8): 0, 1, 2, 3, 4, 5, 6 y 7. El sistema hexadecimal, 16 dígitos (base 16): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F. Conversión binario a octal: Se agrupan los bits de 3 en 3, ya que 8 = 23 668(10 = 1010011100(2 = 1234(8 1 2 3 4 Conversión binario a hexadecimal: Se agrupan los bits de 4 en 4, ya que 16 = 24 668(10 = 1010011100(2 = 29C(16 2 9 C La equivalencia sería: DECIMAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 BINARIO 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 10000 OCTAL 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 HEXADECIMAL 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 Conversión octal, hexadecimal a binario: Se realiza el proceso inverso, es decir, vamos sustituyendo cada dígito por sus correspondientes bits (3 en octal y 4 en hexadecimal). Conversión octal, hexadecimal a decimal: Es equivalente a como lo hacíamos en binario. Lo único que cambia es la base. Tener en cuenta también en hexadecimal que A equivale a 10, …, y F a 15. n-1 ∑ ai bi i= -m Octal: a: 0..7 Hexadecimal: a: 0..F b=8 b = 16 1234(8 = 1x83 + 2x82 + 3x81 + 4x80 = 1x512 + 2x64 + 3x8 + 4x1 = 668(10 29C(16 = 2x162 + 9x161 + Cx160 = 2x256 + 9x16 + 12x1 = 668(10 9 Conversión decimal a octal y hexadecimal: La suma de pesos sólo sirve en binario porque cada peso se multiplica por 1. Por lo tanto utilizaremos: - Divisiones sucesivas. Conversión a binario y de aquí a octal o hexadecimal. 72541(10 = 11B5D(16 72541 16 13 4533 16 5 283 16 11 17 16 1 1 2.2 Números enteros con signo A partir de ahora, consideramos que el formato de almacenamiento de los números dentro de un ordenador tiene un tamaño fijo. Supongamos 8 bits. El hecho de almacenar nuestros números en tamaño fijo de bits nos puede provocar dos posibles situaciones: - Overflow (desbordamiento): Se puede producir cuando al operar con dos números, sobrepasamos la capacidad de lo que podemos almacenar, tanto en la parte positiva como la negativa. En el caso de la suma, sólo puede pasar con números del mismo signo. - Carry (acarreo): Se puede producir cuando al sumar dos números generamos un bit de más en la última suma parcial. Para la representación de los números binarios con signo, estudiaremos tres posibilidades: - Signo y magnitud Exceso n Complemento a 2 10 2.2.1 Signo y magnitud Los números positivos y negativos se representan de la misma forma, pero cambiando su signo, que es el bit de más a la izquierda (MSB). Si estamos considerando números de 8 bits, tendremos 1 bit para el signo y 7 para la magnitud. - Magnitud: indica el valor del número Signo: indica si el número es positivo o negativo o Positivo: MSB = 0 o Negativo MSB = 1 Rango de representación: Con 8 bits ( 1 para el signo y 7 para la magnitud => 27-1 = 127) podremos representar en decimal desde el –127 hasta el 127) 1 1111111 01111111 -> -127 -> 127 Signo Magnitud Conversión a decimal: La magnitud es la misma que en los números positivos por tanto, se calcula exactamente igual (utilizando únicamente la mantisa) y se le cambia el signo. 1 0 0 1 1 0 0 1 = -(24 + 23 + 20) = -(16 + 8 + 1) = -25 Operaciones aritméticas: Suma/resta: Se ha de comparar tanto el signo, como la magnitud de los operandos. - Mismo signo: se suman las magnitudes y se le pone el signo de los operandos. - Diferente signo: se resta siempre a la magnitud mayor la más pequeña, y se le pone al resultado el signo de la magnitud mayor. Inconvenientes de esta representación: - Necesita operación de resta. - Es un sistema muy lento, ya que requiere comparar signos y magnitudes. 11 2.2.2 Exceso n Rango de representación: Con 8 bits podremos representar en decimal desde el –n hasta el (2n-1) - n = 255 - n Conversión a decimal: Todos los números se calculan como hasta ahora. Al resultado se le resta n. Por ejemplo, con exceso 31 1 1 1 0 0 1 1 1 = (27 + 26 + 25 + 22 + 21 + 20) -31 = (128 + 64 + 32 + 4 + 2 + 1)-31 = 200 Operaciones aritméticas Presenta los mismos inconvenientes que cuando trabajábamos con signo y magnitud. 2.2.3 Complemento a 2 Los números positivos se representan de la misma forma que los positivos de signo y magnitud. Los números negativos se representan mediante el complemento a 2 del número positivo. Complemento a 2: Complemento a 1 + 1. Complemento a 1: Cambiar 1´s por 0´s y 0´s por 1´s. 0 0 0 1 1 0 0 1 -> 25 1 1 1 0 0 1 1 0 -> complemento a 1 1 1 1 1 0 0 1 1 1 -> -25 Método alternativo para hallar el complemento a 2: - Se empieza por el bit de más a la derecha (LSB) y vamos recorriendo hacia la izquierda, dejándolos como están hasta que encontremos el primer 1 (incluido). A partir de aquí se hace el complemento a 1 del resto. 0 1 0 1 0 0 -> 20 1 0 1 1 0 0 -> -20 1 0 1 0 1 1 complemento a 1 1 101100 12 Rango de representación: Con 8 bits podremos representar en decimal desde el –128 hasta el 127) 1 0 0 0 0 0 0 0 -> -128 0 1 1 1 1 1 1 1 -> 127 Conversión a decimal: Los números positivos se convierten igual que hasta ahora. Los números negativos (MSB = 1): - Se asigna valor negativo al peso del MSB El resto de bits, se calculan tal y como lo hemos hecho anteriormente. 1 1 1 0 0 1 1 1 = -27 + 26 + 25 + 22 + 21 + 20 = -128 + 64 + 32 + 4 + 2 + 1 = -25 Operaciones aritméticas - Overflow (desbordamiento): Se puede producir cuando al operar con dos números, sobrepasamos la capacidad de lo que podemos almacenar. En nuestro caso (8 bits) si el resultado es > 127 o < 128. En el caso de la suma, sólo puede pasar con números del mismo signo. En este caso el resultado es de signo contrario a los operandos y por tanto, incorrecto. - Carry (acarreo): Se puede producir cuando alguno de los operandos (o los dos), son negativos. El hecho de representar los números en complemento a 2 hace que el resultado tenga 1 bit más de lo que podemos almacenar (9 en nuestro caso). Esto no es un error y sencillamente despreciamos este bit de acarreo. Resta: La resta se realiza mediante la suma del complemento a 2 del número que queremos restar: a – b = a + (-b) por tanto, le sumamos a “a” el complemento a 2 de “b”. 2.3 Formato de representación en coma flotante Para representar números enteros muy grandes, son necesarios muchos bits. También se produce un problema cuando se necesita representar números con parte entera y parte fraccionaria como 22,315. El sistema de numeración en coma flotante permite representar números muy grandes y números muy pequeños sin aumentar el número de bits, y también sirve para representar números con parte fraccionaria y parte entera. 13 Un número en coma flotante (número real) tiene dos partes más un signo. - Signo - Mantisa: es la parte que representa la magnitud - Exponente: es la parte que representa el número de lugares que se va a desplazar el punto decimal. 241.506.800 = 0,2415068 x 109 signo = 0 (positivo) mantisa = 2415068 exponente = 9 Para los números en coma flotante binarios, el formato puede tener tres formas: Simple precisión (32 bits) Doble precisión (64 bits) Precisión ampliada (80 bits) Vamos a estudiar únicamente los de simple precisión 32 bits S (E) Exponente (F) Mantisa (parte fraccionaria) 1 8 23 - Realmente la mantisa consta de 24 bits, ya que en cualquier número binario, el bit más a la izquierda (más significativo) es siempre 1. Por tanto, este 1 se entiende que estará allí aunque no ocupe una posición de bit real. - Los 8 bits de los que consta el exponente representan un exponente desplazado que se ha obtenido sumándole 127 al exponente real (exceso 127). De esta forma podemos definir números muy grandes y muy pequeños. - Casos especiales: o El valor -127 (00000000) del exponente se reserva para dos casos especiales: Si la mantisa es también cero, se está representando el cero. Si la mantisa es distinta de cero, se trata de un número no normalizado, es decir, supondremos que el bit implícito de la parte entera o es 1 sino 0, y el exponente es -126 14 o El valor 128 (11111111) del exponente se reserva para dos casos especiales: Si la mantisa es cero, se está representando el infinito. Si la mantisa es distinta de cero, se está representando el resultado de una operación inválida, es decir, el valor no es un número (NaN – Not a Number) 3. Codificación de información en binario 3.1 Códigos binarios para números decimales. Código BCD 8421 De hecho, todos los sistemas estudiados hasta ahora: decimal, binario, octal y hexadecimal son códigos con pesos, donde la posición de cada dígito tiene un peso igual a la base elevada a la posición que ocupa. Hemos visto que es muy fácil la conversión de binario a octal o hexadecimal o viceversa. Sin embargo, no lo es tanto si queremos hacer la conversión a decimal al cual estamos más acostumbrados, por ello podemos utilizar un sistema de fácil conversión al decimal, el BCD: Binary Coded Decimal. El código decimal binario es un código que permite expresar cada uno de los dígitos decimales con un código binario. En el BCD, existen diferentes códigos, de los cuales el más utilizado es el 8421, llamado así porque utiliza 4 dígitos para representar los números decimales y el peso que se asigna a cada uno de ellos es precisamente 8, 4, 2, 1 = 23, 22, 21, 20 A partir de ahora, nos referiremos siempre a este código por lo que tanto dará nombrarlo como BCD o como 8421. Con 4 dígitos se pueden representar 16 números: 0000 .. 1111 pero el código 8421 sólo utiliza 10 (0 .. 9), del 0000 al 1001 Decimal 0 1 2 3 4 5 6 7 8 9 8421 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 15 Para convertir a BCD un número decimal, basta con reemplazar cada dígito por los correspondientes 4 bits. La operación contraria nos serviría para la conversión de BCD a decimal. 35 2469 00110101 0010010001101001 Representación de los números en BCD con signo Para la representación de los números en BCD con signo, estudiaremos dos posibilidades: - Signo y magnitud - Complemento a 10 Signo y magnitud: - El signo se representa en una cadena de 4 bits. - No nos interesa porque implica realizar la operación de resta. Complemento a 10: - Restar al número, la potencia de 10 correspondiente. - Tiene que tener también un bit de signo. 0011110001001 789 1000 1 0 0 1 0 0 0 0 1 0 0 0 1 -789 -789 signo 211 3.2 Códigos alfanuméricos. Código ASCII Para la comunicación, no sólo se necesitan números sino también letras y otros símbolos. Los códigos alfanuméricos representan números y caracteres alfabéticos. Aunque la mayoría de estos códigos también representan otros caracteres tales como símbolos y distintas instrucciones necesarias para la transferencia de información. Como mínimo un código alfanumérico debe representar los diez dígitos decimales y las 26 (27 en España) letras del alfabeto => 36 elementos. 25 = 32 -> necesitamos 6 bits 26 = 64, por lo que 28 (64 – 36) elementos no se utilizan. Pero siempre hacen falta otros símbolos: punto, coma, interrogante, ... 16 Código ASCII: American Standard Code for Information Interchange. Código alfanumérico universalmente aceptado, que se usa en la mayoría de las computadoras y equipos electrónicos. La mayor parte de los teclados se estandarizan de acuerdo con el código ASCII, y cuando se pulsa una letra, un número o un comando de control, es el código ASCII el que se introduce en el ordenador. El código ASCII dispone de 128 caracteres que se representan mediante un código binario de 7 bits, aunque realmente son 8 con el bit de más a la izquierda igual a cero. MSB = 0.: - Los primeros 32 caracteres son comandos no gráficos (no se imprimen ni salen por pantalla) y son de control (CR, ESC, ...) Decimal: 0 .. 31 binario: 00000000 .. 00011111 hexadecimal: 00 .. 1F - Los demás caracteres son símbolos gráficos que pueden imprimirse o mostrase por pantalla, e incluyen las letras del alfabeto (mayúsculas y minúsculas), los diez dígitos decimales, los signos de puntuación, y otros símbolos comúnmente utilizados. Decimal: 32 .. 127 binario: 00100000 .. 01111111 hexadecimal: 20 .. 7F ASCII extendido: Además de los 128 caracteres ASCII estándar, existen otros 128 caracteres adicionales (MSB = 1) que fueron adoptados por IBM para utilizar en sus PC´s. Debido a la popularidad del PC, estos caracteres especiales se han extendido a otras aplicaciones, convirtiéndose en un estándar no oficial. Los nuevos caracteres que van en decimal desde 128 a 255 o en hexadecimal de la 20 a FF, están formados por: - Caracteres alfabéticos no ingleses (ñ, ...) Símbolos no ingleses Letras griegas Símbolos matemáticos (±, ÷, ...) Caracteres para gráficos Caracteres gráficos de barras Caracteres sombreados 17 3.3 Códigos para la detección de errores En un sistema digital, la información se transmite mediante 0´s y 1´s, que equivale a subidas y bajadas de tensión. Estas señales eléctricas se pueden ver alteradas a causa de fallos físicos (subidas de tensión , ruidos, ...), por lo que se producen diferencias entre los datos transmitidos y los recibidos. Para detectar un error de 1 bit es necesario que como mínimo añadamos 1 bit a los bits que transmitimos. Método de paridad para la detección de errores. Muchos sistemas emplean 1 bit de paridad como medio para la detección de errores de 1 bit. Cualquier grupo de bits contiene un número par o impar de 1´s. Un bit de paridad se añade al grupo de bits para hacer que el número total de 1´s sea siempre par (paridad par), o impar (paridad impar). Un determinado sistema puede trabajar con paridad par o impar, pero no con ambas. Paridad par: nº de 1´s par Paridad impar: nº de 1´s impar bit de paridad par bit de paridad impar 00000 10001 10010 00011 10000 00001 00010 10011 Con este método sólo podemos detectar errores en un nº impar de bits. Se suele utilizar en ASCII. 18