REPRESENTACIÓN DIGITAL DE LA INFORMACIÓN



Documentos relacionados
Los sistemas de numeración se clasifican en: posicionales y no posicionales.

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

by Tim Tran:

TEMA 2 REPRESENTACIÓN BINARIA

Representación de la Información

Sistemas de numeración

Unidad de trabajo 2: INFORMÁTICA BÁSICA (primera parte)

Unidad Didáctica. Códigos Binarios

SISTEMAS DE NUMERACIÓN. Sistema decimal

1. Informática e información. 2. Sistemas de numeración. 3. Sistema binario, operaciones aritméticas en binario, 4. Sistemas octal y hexadecimal. 5.

Lección 1. Representación de números

Tema 2. La Información y su representación

El sistema decimal, es aquél en el que se combinan 10 cifras (o dígitos) del 0 al 9 para indicar una cantidad específica.

TEMA 2: Representación de la Información en las computadoras

SISTEMAS DE NUMERACIÓN. Sistema de numeración decimal: = =8245,97


Tema 2 : Códigos Binarios

Informática Básica: Representación de la información

Tema 1. Representación de la información MME

Sistemas de Numeración Operaciones - Códigos

Capítulo 2 REPRESENTACIÓN DE LOS DATOS. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

TEMA 1 Representación de la información

ELECTRÓNICA DIGITAL TEMA 1

Matemática de redes Representación binaria de datos Bits y bytes

Clase 02: Representación de datos

Materia: Informática. Nota de Clases Sistemas de Numeración

INSTITUTO UNIVERSITARIO DE TECNOLOGÍA JOSE LEONARDO CHIRINO PUNTO FIJO EDO-FALCON CATEDRA: ARQUITECTURA DEL COMPUTADOR PROFESOR: ING.

1. SISTEMAS DIGITALES

SISTEMAS NUMÉRICOS (SISTEMAS DE NUMERACIÓN)

21/02/2012. Agenda. Unidad Central de Procesamiento (CPU)

En la actualidad ASCII es un código de 8 bits, también conocido como ASCII extendido, que aumenta su capacidad con 128 caracteres adicionales

Capítulo 1: Sistemas de representación numérica Introducción. Dpto. de ATC, Universidad de Sevilla - Página 1 de 8

UD 1. Representación de la información

DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO

Fundamentos de Informática 1er curso de ingeniería Industrial. Tema 2. Datos. Tema 2. Datos

Tema 4: Sistemas de Numeración. Codificación Binaria. Escuela Politécnica Superior Ingeniería Informática Universidad Autónoma de Madrid

Introducción a Códigos

Curso Completo de Electrónica Digital

A continuación se mostrarán ejemplos de tres clases de códigos: numéricos, alfanuméricos y de despliegue.

❷ Aritmética Binaria Entera

Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso Aritmética binaria

8 millares + 2 centenas + 4 decenas + 5 unidades + 9 décimos + 7 céntimos

Tema I. Sistemas Numéricos y Códigos Binarios

ANEXO 2: REPRESENTACION DE LA INFORMACION EN LOS COMPUTADORES

CONCEPTOS BÁSICOS DE INFORMÁTICA. REPRESENTACIÓN DE LA INFORMACIÓN.

TEMA I: INTRODUCCIÓN A LA ELECTRÓNICA DIGITAL

TEMA 1: SISTEMAS INFORMÁTICOS. Parte 2: representación de la información

UNIDADES DE ALMACENAMIENTO DE DATOS

Informática Bioingeniería

ARQUITECTURA DE LAS COMPUTADORAS PRACTICA

INFORMÁTICA. Matemáticas aplicadas a la Informática

SISTEMAS Y CÓDIGOS DE NUMERACIÓN

Introducción a la Programación 11 O. Humberto Cervantes Maceda

Sistema binario. Representación

Tema 1: Sistemas de numeración

CURSO TECNOLOGÍA TECNOLOGÍA 4º ESO TEMA 5: Lógica binaria. Tecnología 4º ESO Tema 5: Lógica binaria Página 1

Representación de Datos. Una Introducción a los Sistemas Numéricos

Instituto Tecnológico de Celaya

Sistemas de Numeración

Ingeniería Técnica en Informática de Sistema E.T.S.I. Informática Universidad de Sevilla

SISTEMAS DE NUMERACIÓN.

Tema 1. SISTEMAS DE NUMERACION

TEMA II: REPRESENTACIÓN DE LA INFORMACIÓN

PLAN DE REFUERZO NOMBRE ESTUDIANTE: Nº GRADO: 6

EIE SISTEMAS DIGITALES Tema 2: Sistemas de Numeración, Operaciones y Códigos

SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION

Los números racionales

SISTEMAS DE NUMERACIÓN

UNIDAD Nº 1: 1. SISTEMAS DE NUMERACION. Formalizado este concepto, se dirá que un número X viene representado por una cadena de dígitos:

Aritmética finita y análisis de error

Tema 2: Sistemas de representación numérica

2. Desde los transistores hasta los Circuitos Integrados 3Sit 3. Sistemas de representación numérica éi 4. Números con signo

UNIDAD 3: ARITMÉTICA DEL COMPUTADOR

Cifras significativas e incertidumbre en las mediciones

EJERCICIOS DEL TEMA 1

Naturaleza binaria. Conversión decimal a binario

Escuela Politécnica Superior Ingeniería Informática Universidad Autónoma de Madrid

Organización del Computador. Prof. Angela Di Serio

Lógica Binaria. Arquitectura de Ordenadores. Codificación de la Información. Abelardo Pardo Universidad Carlos III de Madrid

Informática. Temas 27/03/2014. Carrera: Bioingeniería Profesora: Lic. S. Vanesa Torres JTP: Ing. Thelma Zanon

Representación de números en binario

Transformación de binario a decimal. Transformación de decimal a binario. ELECTRÓNICA DIGITAL

Estructura y Tecnología de Computadores (ITIG) Luis Rincón Córcoles José Ignacio Martínez Torre Ángel Serrano Sánchez de León.

Introducción a los Sistemas Digitales

1. Representación de la información en los sistemas digitales

Materia Introducción a la Informática

x

EJERCICIOS RESUELTOS SOBRE ERRORES DE REDONDEO

SITEMA BINARIO, OCTAL Y HEXADECIMAL: OPERACIONES

UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL CÓRDOBA EL LENGUAJE DE LOS DATOS EN LA PC Y SU FORMA DE ALMACENAMIENTO

Matemáticas para la Computación

Computación Tercer Año

Polinomios y fracciones algebraicas

Aritmética Binaria. Luis Entrena, Celia López, Mario García, Enrique San Millán. Universidad Carlos III de Madrid

Representación de números enteros: el convenio signo y magnitud

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

DISCOS RAID. Se considera que todos los discos físicos tienen la misma capacidad, y de no ser así, en el que sea mayor se desperdicia la diferencia.

Sebastián García Galán

Computación I Representación Interna Curso 2011

SISTEMAS NUMERICOS. Ing. Rudy Alberto Bravo

Transcripción:

1. REPRESENTACIÓN DIGITAL DE LA INFORMACIÓN OBJETIVOS Comparar la representación de la información mediante señales analógicas y digitales. Conocer sistemas de numeración alternativos, como el binario, el octal o el hexadecimal. Enumerar los métodos más usuales empleados para representar en un computador digital los números enteros y reales. Estudiar cómo se codifican los caracteres. Describir algún sistema que puede ser útil en la detección de errores e incluso su corrección.

Un ordenador es una máquina para procesar información. Sin embargo, un ordenador no puede trabajar directamente con la información, primero ha de codificarla a un sistema que le permita su manipulación. La forma en que se realice esta codificación tendrá una gran influencia en la propia estructura del ordenador. A lo largo de este capítulo se tratará de mostrar los fundamentos de la representación digital de la información. Este tipo de representación es utilizada en los conocidos como sistemas digitales, entre los que se encuentran los ordenadores actuales. Antes de comenzar el capítulo es conveniente resaltar que un ordenador va a trabajar con dos tipos principales de información: datos e instrucciones. Las instrucciones permitirán la ejecución de programas en el ordenador, gracias a los cuales podremos procesar los datos. Dejaremos la codificación de las instrucciones para el capítulo 2, centrándonos ahora en la codificación de los datos. 1.1 Representación digital frente a analógica En la actualidad estamos inmersos en lo que se ha llamado la revolución digital. Dentro de esta revolución tecnológica podemos observar como los obsoletos sistemas analógicos están siendo reemplazados por modernos sistemas digitales. Un ejemplo de ello fue el cambio de las cintas de video en VHS a los modernos DVDs. Hoy en día está pasando con las emisiones de TV o con la fotografía, y en un futuro cercano ocurrirá con las emisiones de radio y el cine. Pero, qué es lo que tienen los sistemas digitales que los hacen tan atractivos? Qué quiere decir exactamente el término digital? En este apartado trataremos de dar respuesta a estas preguntas. Los sistemas suelen representar la información por medio de señales. Según la forma en que puede variar una señal, tendremos dos alternativas: Analógica (o continua): Es aquel tipo de señal que puede adoptar cualquier valor dentro del margen permitido. Digital (o discreta): Es toda señal que no puede tomar más de un número determinado de valores. Por ejemplo, la altura de la columna de mercurio en un termómetro nos está proporcionando una información de tipo analógica, dado que dentro del margen permitido puede tomar cualquier valor. Sin embargo, si dispusiéramos de un termómetro electrónico, con un display de dos dígitos, la información que este nos proporcionaría sería de tipo digital, al sólo poder tomar un número limitado de valores (entre 0 y 99 grados).

Fig. 1-1: Ejemplo de información analógica y digital. Vemos como variaría esta señal a lo largo del tiempo, según fuera tomada mediante un termómetro analógico o uno digital: temperatura 24 23 22 21 19 18 17 16 15 14 t temperatura 24 23 22 21 19 18 17 16 15 14 t Fig. 1-2: Variación de una señal analógica y otra digital a lo largo del tiempo. A continuación enumeraremos las ventajas de los sistemas digitales frente a los analógicos: Todas las señales sufren variaciones no deseadas cada vez que son transmitidas o manipuladas. Estos fenómenos se conocen como ruido o distorsiones y ocurren siempre en mayor o menor medida. En las señales analógicas, cualquier variación de la señal es de difícil recuperación, por lo que la correspondiente pérdida de información ya no podrá ser recuperada. Por el contrario, un ruido incorporado a una señal digital, no le afectará siempre que no sea lo suficientemente grande para cambiar un nivel de cuantificación. temperatura 24 23 22 21 19 18 17 16 15 14 t temperatura 24 23 22 21 19 18 17 16 15 14 t Fig. 1-3: Señales analógica y digital tras incorporarles ruido.

Si queremos que una señal analógica, que esta transportando una información, se vea afectada lo menos posible por fenómenos como el ruido o las distorsiones, tendremos que utilizar componentes de calidad. Esto repercutirá en el coste del sistema. Por el contrario, si utilizamos una señal digital, estos fenómenos afectarán en menor medida. Por lo tanto, la utilización de componentes de bajo coste no supondrá una pérdida en la información procesada. Como estamos comentando siempre que un sistema procesa una información analógica, esta se ve deteriorada. Conseguir sistemas que apenas introduzcan distorsiones (sistemas de alta fidelidad) resulta costoso. Por el contrario, una señal digital puede ser procesada sin pérdida de información (100% de fidelidad). Por ejemplo, si queremos duplicar una información contenida en un soporte analógico (como una cinta de video), la copia es siempre de peor calidad que el original. Por el contrario, si utilizamos un soporte digital (como un DVD), la copia es totalmente exacta al original. Pero, que ocurriría si en lugar de una pequeña señal de ruido aparece una interferencia, que alterara totalmente la señal. En un sistema analógico este tipo de circunstancias son muy complejas de tratar. Por el contrario en los sistemas digitales podemos detectar estas anomalías utilizando códigos detectores de errores. Incluso podremos subsanar el problema utilizando códigos recuperadores de errores. En un sistema analógico resulta muy complejo introducir cambios en el sistema, dado que, resulta imprescindible modificar el hardware. En los sistemas digitales que utilizan un procesador para manipular la información resultan mucho más flexibles. No tenemos más que cambiar el software del procesador para introducir cambios en el sistema. La mayoría de sistemas analógicos no incorporan sistemas de seguridad, al resultar muy complejos de implementar. Por el contrario, en un sistema digital no es difícil codificar adecuadamente la información para que esta no pueda ser interpretada fuera del sistema. Si estamos diseñando un sistema que requiera la integración de señales de diferente naturaleza (audio, video, datos), y utilizamos una solución analógica tendremos que procesar cada una de las señales por separado. Si por el contrario, nos decantamos por una solución digital podremos manipular todas las señales utilizando el mismo sistema. Un ejemplo lo tenemos en el DVD. Aunque fue diseñado para almacenar video, puede ser fácilmente utilizado para almacenar información de cualquier tipo. No todo son ventajas. La representación digital también tiene sus inconvenientes: Muchas de las información que queremos procesar tiene una naturaleza analógica. Si queremos manipular esta información en un sistema digital, lo primero que habrá que hacer es pasar la información analógica a un formato digital. A este proceso se conoce por el nombre de digitalización y siempre introduce alguna pérdida de información con

respecto a la señal originaria. En la fig. 1-2 podemos ver un ejemplo de digitalización. La señal analógica de la izquierda es convertida en la señal digital de la derecha, procurando que se parezca lo más posible a la original, pero respetando los niveles de cuantificación establecidos. Si estos niveles de cuantificación no nos parecen lo suficiente precisos podremos elegir otros (ej. décimas de grado). El problema es que una vez establecidos, resultará muy complejo cambiar los niveles de cuantificación. A lo largo de este capítulo, veremos como esta limitación afecta a los ordenadores digitales. Los cuales serán incapaces de representar en concepto de número entero o real, y tendrán que trabajar con aproximaciones. Otro inconveniente de los sistemas digitales lo tenemos en la transmisión de señales. La señal digital requiere mayor ancho de banda para ser transmitida que la analógica. La transmisión de señales digital requiere una sincronización precisa entre los tiempos del reloj de transmisor, con respecto a los del receptor. Un desfase, por mínimo que sea, cambia por completo la señal. Este problema será estudiado en el capítulo 3. Ventajas Inconvenientes Ruido Coste Analógico Si se altera la señal original no es posible recuperarla Elevado, si queremos que las señales no se distorsionen Digital El ruido solo afecta cuando es capaz de alterar un nivel de cuantificación Reducido, una ligera distorsión no afecta Fidelidad Resulta costosa conseguirla Podemos conseguir que no se produzca pérdida de información Interferencia Flexibilidad Complejo de detectar. Se produce perdida de información Difíciles de reconfigurar, hay que cambiar el hardware Pueden detectarse y corregirse utilizando códigos especiales Fáciles de reconfigurar cuando se utilizan procesadores (software) Seguridad Difícil de implementar Fácil de implementar Integración, audio, video, datos Digitalización Un sistema por cada tipo de señal No es necesaria la conversión analógico-digital Un solo sistema Imprescindible. Se produce una pérdida inicial de información. Transmisión Menor ancho de banda Mayor ancho de banda Sincronización No es precisa. Los relojes del emisor y receptor han de estar sincronizados Fig. 1-4: Sistemas analógicos frente a digitales. Dentro de las señales discretas, hay un tipo especialmente interesante para nosotros: son las señales binarias, en las que los valores permitidos a la magnitud física son sólo dos. La importancia de estas señales, reside en que los circuitos de que constan los ordenadores trabajan con este tipo de señales.

La unidad básica de información es el BIT (BInary digit). Únicamente puede tener dos valores posibles: 0 ó 1, que suelen representarse físicamente por la ausencia o presencia de tensión en una línea eléctrica. Dado que un bit puede contener una cantidad de información sumamente pequeña, los ordenadores trabajan con agrupaciones de bits a las que se llama palabra, normalmente compuesta por 8, 16, 32 ó 64 bits. La longitud de palabra de un ordenador determina el número de bits con los que puede trabajar de una vez, por lo tanto está estrechamente ligado con la potencia del ordenador. Los grupos de 8 bits se utilizan con mucha frecuencia, por lo que reciben un nombre especial; el byte. 1.2 Sistemas de numeración Un sistema de numeración consiste en un conjunto de símbolos que combinados adecuadamente mediante unas reglas bien definidas, nos permite expresar valores numéricos. Estamos acostumbrados al sistema de numeración conocido como árabe o decimal. Sin embargo, en otras épocas y en otras culturas se han utilizado sistemas de numeración alternativos. Es el caso de los sistemas empleados por los romanos, por los aztecas o por los egipcios. Árabe 1 2 3 5 10 20 21 50 100 500 1000 10000 Babilónica > >> >>> >>> >> > Egipcia jeroglífica Griega I II III Γ I II X M Romana I II III V X XX XXI L C D M Maya Fig. 1-5: Algunos sistemas de numeración utilizados en la antigüedad. A continuación estudiaremos una serie de sistemas de numeración que son de especial interés en el campo de la informática.

1.2.1 Sistema de numeración decimal base=10 dígitos (0,1,...,9) La forma que solemos usar para representar un número está basada en un sistema de numeración posicional decimal. Se dice que es decimal porque se dispone de diez símbolos o dígitos diferentes, del 0 al 9, y que es posicional porque cada dígito que compone una cifra tiene un valor en función de su posición. Por ejemplo cuando escribimos el número 345,67 lo podemos interpretar como la suma de 3 centenas más 4 decenas más 5 unidades más 6 décimas más 7 centésimas. O lo que es lo mismo, como un polinomio de potencias de diez: 345,67 = 3 10 2 + 4 10 1 + 5 10 0 + 6 10-1 + 7 10-2 La base en un sistema de numeración es el número de signos distintos (dígitos) que se usan en el sistema. Por tanto, este sistema de numeración tiene base 10. Es frecuente cuando se trabaja con ordenadores emplear sistemas de numeración alternativos. Normalmente se suele emplear el sistema posicional aunque con una base diferente. Generalizando, en un sistema de numeración posicional con base b, un número N se puede representar como una secuencia de dígitos: donde: a n a n-1... a 1 a 0 a -1... a -p a n a n-1... a 1 a 0,a -1... a -p b es la parte entera y es la parte fraccionaria ambas partes están separadas por la coma o el punto decimal. a n recibe el nombre de dígito más significativo y a -p es el dígito menos significativo. Para obtener el valor que se está representando, al igual que se hacía en decimal, se puede desarrollar el polinomio de potencias de la base: N = a n b n + a n-1 b n-1 +... + a 1 b 1 + a 0 b 0 + a -1 b -1 +... + a -p b -p = n i= p ai b i donde: b es un número entero mayor que uno que representa la base. a i son los dígitos que representan valores comprendidos entre 0 y b-1. Para indicar el sistema de numeración en que se ha representado un número, se utilizará un subíndice que indique la base del sistema.

1.2.2 Sistema de numeración binario base=2 dígitos (0,1) El sistema binario es aquel cuya base es dos. Por lo tanto, consta tan sólo de dos signos distintos 0 y 1, que reciben el nombre de dígitos binarios o bits. Es de especial interés cuando se trabaja con máquinas electrónicas que, como los ordenadores, funcionan internamente mediante dispositivos que pueden tomar dos estados. Dado un número en binario, si queremos conocer el valor equivalente en decimal, no tendremos más que desarrollar el polinomio de potencias de la base: 1101,01 2 = 1 2 3 + 1 2 2 + 0 2 1 + 1 2 0 + 0 2-1 + 1 2-2 10 = 13,25 10 En la siguiente tabla se muestra la equivalencia entre los diez primeros números decimales y binarios. decimal binario 0 0 1 1 2 10 3 11 4 100 5 101 6 110 7 111 8 1000 9 1001 Fig. 1-6: Equivalencia entre sistemas decimal y binario. 1.2.3 Sistema de numeración octal base=8 dígitos (0,1,...,7) El sistema de numeración octal se basa en el sistema posicional con base 8. Por lo que para conocer el valor de una cifra expresada en este sistema no tenemos más que aplicar el polinomio de potencias de la base. Por ejemplo: 157 8 = 1 8 2 + 5 8 1 + 7 8 0 = 64 + 40 + 7 10 = 111 10 Trabajar en sistema binario puede resultar engorroso dada la longitud que alcanza una cifra. Por ejemplo el número decimal 5000 10 que es representado con cuatro dígitos decimales, requiere de trece bits para ser representado en binario: 1001110001000 2. Este problema es paliado utilizando representaciones como la octal, que permite la representación condensada de un número, aunque su transcripción a binario es casi inmediata. Esto se consigue utilizando una base que sea una potencia exacta de 2 (8=2 3 ). Si se cumple esta propiedad, la traducción de un número al sistema binario se realiza de forma sencilla, simplemente sustituyendo cada dígito por su equivalente en binario. La siguiente tabla muestra la relación los ocho primeros números octales y binarios.

octal binario 0 000 1 001 2 010 3 011 4 100 5 101 6 110 7 111 Fig. 1-7: Equivalencia entre sistemas octal y binario. Como se ha indicado, si quisiéramos obtener el equivalente en binario del número octal 347, no tendríamos más que ir sustituyendo uno a uno sus dígitos por sus tres bits equivalentes: 347 8 = 011 100 111 2 Para pasar de binario a octal hay que realizar el proceso a la inversa: se agrupan los bits de tres en tres y se sustituye cada grupo por su equivalente en octal. Pero recordando siempre comenzar de la coma a la izquierda y de la coma a la derecha. En caso de que al final, no encontráramos un grupo de exactamente tres bits, tendríamos que completar con ceros. Veamos un ejemplo: 1100,11 2 = 001 100, 110 2 = 14,6 8 1.2.4 Sistema hexadecimal base=16 dígitos (0,1,...,9,A,B,C,D,E,F) El sistema hexadecimal tiene base 16 y por tanto requiere 16 signos distintos para expresar un dígito. Se usan los diez símbolos del sistema decimal más las seis primeras letras del abecedario (de la A a la F ). El interés de este sistema de numeración es el mismo que el del octal. Dieciséis es una potencia exacta de 2, por lo que su conversión a binario es inmediata. A continuación se muestra la equivalencia en binario de los 16 dígitos hexadecimales: hexadecimal binario 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 A 1010 B 1011 C 1100 D 1101 E 1110 F 1111 Fig. 1-8: Equivalencia entre sistemas hexadecimal y binario.

La trascripción de un número hexadecimal a binario se realiza de igual forma a como se hacía con el sistema octal, pero esta vez tomando grupos de 4 bits: 8E1 16 = 1000 1110 0001 2 Este número, en decimal, correspondería a: 8E1 16 = 8 16 2 + 14 16 1 + 1 16 0 10 = 2273 10 1.2.5 Método de conversión entre sistemas de numeración Para convertir un número expresado en cualquier sistema de numeración a su representación equivalente decimal bastará, como se vio en 2.2.1, con desarrollar el polinomio de potencias de la base. A continuación se describe un procedimiento que nos permitirá transcribir un numero decimal a su equivalente utilizando otra base de numeración. Estas operaciones dependerán de si se trata de convertir la parte entera o la parte fraccionaria del número. Estudiaremos primero la conversión de la parte entera: Tomaremos la parte entera del número en decimal y la dividimos entre la base a la que queremos llegar. El resto de esta división será el dígito menos significativo de la cifra buscada. El cociente obtenido lo dividiremos de nuevo por la base, obteniendo en el resto el siguiente dígito menos significativo. Este proceso termina cuando se obtiene un cociente inferior a la base. Este último cociente forma parte de la solución, como dígito más significativo. La sulución se completa con los restos obtenidos, tomados de derecha a izquierda. A continuación se detallan algunos ejemplos de conversión del número en decimal 252 a varias bases de numeración: 252 2_ -252 126 2_ 0-126 63 2_ 0-62 31 2_ 252 10 = 11111100 2 1-30 15 2_ 1-14 7 2_ 1-6 3 2_ 1-2 1 1 252 8_ -24 31 8 252 10 = 374 8 012-24 3-8 7 4

252 16_ -16 15 15 10 =F 16 252 10 = FC 16 092 12 10 =C 16-80 12 Fig. 1-9: Ejemplos de conversiones parte entera, entre distintos sistemas de numeración. Para la conversión de la parte fraccionaria seguiremos el siguiente algoritmo: Tomaremos la parte fraccionaria del numero en decimal y la multiplicamos por la base. La parte entera del resultado de esta multiplicación, la tomamos como el primer dígito a la derecha de la coma. Y realizamos el mismo proceso con la parte fraccionaria resultante. Es decir, la multiplicamos de nuevo por la base y tomamos como siguiente dígito la parte entera del resultado de esta multiplicación. Este proceso se repite hasta que la parte fraccionaria sea cero o hasta que consideramos que tenemos suficiente precisión. A continuación se muestran algunos ejemplos: 0.625 x 2 = 1.25 -> 1 0.25 x 2 = 0.5 -> 0 0.625 10 = 0.101 2 0.5 x 2 = 1.0 -> 1 0.324 x 8 = 2.592 -> 2 0.592 x 8 = 4.736 -> 4 0.736 x 8 = 5.888 -> 5 0.354 10 = 0.245706... 8 0.888 x 8 = 7.104 -> 7 0.104 x 8 = 0.834 -> 0 0.832 x 8 = 6.656 -> 6... 0.431 x 16 = 6.896 -> 6 0.896 x 16 =14.334 -> 14 10 =E 16 0.334 x 16 = 5.376 -> 5 0.376 x 16 = 6.016 -> 6 0.431 10 =0.6E5604... 16 0.016 x 16 = 0.256 -> 0 0.256 x 16 = 4.096 -> 4... Fig. 1-10: Ejemplos de conversiones parte fraccionaria, entre distintos sistemas de numeración. Si el número decimal a transcribir tiene parte entera y parte fraccionaria, se convertirán ambas partes, uniendo los resultados obtenidos : 252.625 10 = 11111100.101 2 252.324 10 = 374.245706... 8 252.432 10 = FC.6E5604... 16 Si quisiéramos pasar un numero de cualquier base b 1 a cualquier otra base b 2, no tendríamos más que pasar de b 1 a decimal y a continuación de decimal a b 2. Ambos procesos han sido descritos anteriormente.

1.2.6 Aritmética binaria Entre los sistemas de numeración estudiados, el que presenta mayor interés es el binario, dada su aplicación directa en el estudio de la estructura interna del computador. Los sistemas octal y hexadecimal son utilizados únicamente como forma más compacta de expresar cantidades binarias. En este punto vamos a estudiar cómo se realizan operaciones aritméticas en el sistema de numeración binario. Veremos que es sumamente sencillo, por lo que su realización mediante circuitos electrónicos no será una tarea complicada. Suma Todas las operaciones aritméticas las vamos a realizar según estamos acostumbrados en decimal aunque hay que tener en cuenta que cada dígito sólo puede tomar los valores 0 ó 1. De esta forma, si queremos sumar dos dígitos, sólo se pueden dar las siguientes combinaciones: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 (o lo que es lo mismo, 0 y llevamos 1) Aplicamos la tabla anterior en la suma de dos cifras de más de un dígito: Resta 1 1 11 1 11010110011 + 10010111010 101101101101 Los resultados que podemos obtener de la resta de dos bits son: 0-0 = 0 0-1 = -1 (o lo que es lo mismo: 1 y llevamos 1) 1-0 = 1 1-1 = 0 La extensión a números de más bits es inmediata: 111 10001-1010 00111 Este algoritmo solo puede utilizarse si el minuendo es mayor que el sustraendo.

Multiplicación Los resultados que podemos obtener de la multiplicación de dos bits son: 0 x 0 = 0 0 x 1 = 0 1 x 0 = 0 1 x 1 = 1 La extensión a números de más bits se realiza igual que en decimal: 1011 x 1010 0000 1011 0000 1011. 1101110 División Las reglas de la división son similares a las que estamos acostumbrados: 0 / 0 = no definido 0 / 1 = 0 1 / 0 = infinito 1 / 1 = 1 La extensión a números de más bits se realiza como en el sistema decimal: 1101100 101. -101 10101 00111-101 01000-101 0011 1.3 Representación de números enteros Habitualmente utilizamos el signo - cuando queremos expresar un número negativo. Esta norma es también valida en cualquier sistema de numeración: -101 2 = -5 10 Sin embargo, el problema que abordamos en lo que queda de tema, es cómo se representa internamente la información dentro de un ordenador. Hay que tener en cuenta siempre dos restricciones cuando queremos almacenar datos en un ordenador: Sólo podremos trabajar con bits, dado que los circuitos que forman un ordenador sólo pueden trabajar en dos estados a los que les asociaremos los valores 0 y 1.

Todos datos son almacenados en palabras, que son agrupaciones de bits de tamaño limitado. La longitud de palabra de un ordenador dado, permanece constante. 1.3.1 Binario Natural Con estas dos limitaciones, si queremos almacenar en una palabra de n bits un valor natural, podremos utilizar directamente el sistema de numeración binario que hemos estudiado. A esta representación se le conoce con el nombre de binario natural. Si disponemos de 4 bits para representar el número 5: 5 10 = 101 2 = 0101 2 0101 (representación del número 5 en binario natural utilizando 4 bits. Cuando pongamos un números dentro de un cuadro, indica que es la representación interna del ordenador) A diferencia de los números naturales, en el sistema de representación binario natural estaremos limitados a un número finito de valores que podremos representar. Las combinaciones posibles de números se encuentran en un intervalo el cual se conoce como rango de representación. El rango de representación suele expresarse indicando el número más pequeño que podremos representar y el más grande. Si disponemos de n bits, resulta evidente que el menor valor posible será el 0, representado mediante n ceros. El valor máximo que podremos representar es el que tiene el valor más grande en todos los dígitos, es decir 1 en cada uno de los n dígitos. El valor equivalente en decimal es 11. n.11 =2 n - 1 binario decimal 00...00 00...01 0 1...... 11...11 2 n 1 n Por lo que el rango de representación es [0, 2 n 1]. Hemos afirmado que 11 n 11 2 = 2 n 1 10, esto puede comprobarse fácilmente matemáticamente. Sin embargo, trataremos de dar una justificación más intuitiva. Si disponemos de n bits, el número total de combinaciones posibles es 2 n (n posiciones cada una de las cuales puede tomar 2 valores). Si nos fijamos en la tabla anterior, a la primera combinación toma el valor 0, la segunda 1,... y por lo tanto la última tendrá que ser 2 n 1 Una vez aclarado esto vamos a estudiar tres sistemas que nos permitirán almacenar números enteros, es decir con signo.

1.3.2 Signo y magnitud Lo más inmediato que se nos podría ocurrir para representar el signo de un número, es reservar un bit para el signo, dejando el resto de bits para representar la magnitud del numero. El convenio usual es representar el signo + mediante el 0 y el signo - mediante el 1. El bit que se suele reservar para el signo es el que ocupa la posición más a la izquierda, o lo que es lo mismo, el bit más significativo. El siguiente esquema muestra de forma gráfica como se codifica un número en este sistema de representación: +a 0 a - a 1 a La representación, según este convenio, de los números 121 y -121 utilizando 8 bits y sabiendo que 121 10 = 1111001 2 es la siguiente: 121 01111001-121 11111001 Este sistema presenta el inconveniente de que si queremos sumar dos números cualesquiera, antes habrá que comprobar sus signos. La posibilidades que pueden presentarse son muchas. Por ejemplo, si un operando tiene signo negativo y el otro positivo, será necesario utilizar el algoritmo de la resta en lugar del de la suma; si además el valor absoluto del número negativo es mayor que el del positivo, habrá que invertir el orden de la resta y luego cambiar el signo al resultado. Un circuito que realizara esto sería bastante complejo. 1.3.3 Complemento a dos Las dificultades para realizar una suma en el sistema de representación anterior hace que se utilicen más frecuentemente otras representaciones que tienen la ventaja de poder utilizar los mismos circuitos tanto para las sumas de números en binario natural como números con signo. En la representación complemento a dos, igual como hacíamos en signo y magnitud, utilizaremos el bit más significativo para indicar el signo; 1 para los números negativos y 0 para los positivos. Si se trata de un número positivo, igual como hacíamos en el sistema anterior, utilizaremos directamente la codificación en binario natural de dicho número. Si por el contrario, el número es negativo se almacenará el complemento a dos de la magnitud del número. +a 0 a -a 1 ca2(a)

El complemento a dos de un número a utilizando n bits es una función que se define como: Ca2(a) = 2 n a Por ejemplo el complemento a dos de 6, trabajando con 5 bits, se calcula: Ca2(6 10 ) = 2 5-6 10 = 32 6 10 = 26 10 = 11010 2 Existe una forma más sencilla de calcular el complemento a dos de un número, siempre que este esté representado en binario. Consiste en sustituir todos sus ceros por unos y todos los unos por ceros y, a continuación, sumar 1. Pero, cuidado, antes de efectuar el cambio es imprescindible rellenar con ceros por la izquierda hasta el número de bits que estemos utilizando. Ca2(110 2 ) = Ca2(00110 2 ) = 11001 + 1 2 = 11010 2 Por tanto la representación en el sistema complemento a 2 de los números 6 y 6, utilizando 6 bits, es la siguiente: 6 000110 6 111010 En el caso positivo se ha almacenado el bit de signo (0) seguido de la representación en binario natural. Para el caso negativo, se ha almacenado el bit de signo (1), seguido el complemento a dos de 6 con 5 bits. La operación de complemento a dos tiene la propiedad de ser reversible, es decir, el complemento del complemento de un número es el número original. Esto significa que para obtener un número desconocido cuyo complemento conocemos, basta con calcular su complemento a dos para obtener este número. Ca2( Ca2(a) ) = a Si disponemos de un número con representación en complemento a dos y queremos averiguar el valor correspondiente en decimal, seguiremos el siguiente proceso. En primer lugar nos fijaremos en el bit más significativo, para averiguar si se trata de un número positivo o negativo. Si es cero, el número es positivo, ya tendremos directamente el valor representado en binario natural. Si es uno, se trata de un número negativo, por lo que se utilizó la operación de complemento a dos para codificar el valor. Para descubrir de que valor se trataba calcularemos de nuevo el complemento a dos. Y luego le pondremos el signo menos al tratarse de un número negativo.

Por ejemplo: 00101011 representa un número positivo por tener un 0 en el bit más significativo. En este caso el número se ha introducido directamente en binario natural: 0101011 2 = 2 5 +2 3 +2 1 +2 0 10 = 32+8+2+1 10 = 43 10 En el caso de este otro código: 10101001 representa un número negativo por tener un 1 en el bit más significativo y ese número en valor absoluto se obtiene calculando el complemento a dos de 0101001 que es: Ca2(0101001) = 1010110 + 1 = 1010111 que equivale en decimal a: 1010111 2 = 2 6 +2 4 +2 2 +2 1 +2 0 10 = 64+16+4+2+1 10 = 87 10 por lo que el número representado por 10101001 es: -87 La mayor ventaja de este sistema de representación es que se simplifica la realización de las operaciones aritméticas de suma y resta, no teniendo que preocuparnos del signo de cada uno de los operandos. La suma se realiza mediante el método habitual, sin más que sumar uno a uno todos los bits (incluyendo el que nos indica el signo). Al realizar una suma, el número de bits del resultado puede exceder en uno al número de bits que estamos empleando en la representación (n). En este caso, este bit que no puede ser almacenado, será eliminado. El resultado quedará perfectamente calculado, estando representado en este mismo sistema de complemento a dos. Esta propiedad hace que sea el sistema más utilizado en la práctica. Para comprobar esta propiedad vamos a realizar la suma de dos números -75 y 18 con una representación de 8 bits. pasamos primero los números a binario: -75 10 = -1001011 2 Ca2(1001011) = 0110100 +1 = 0110101 18 10 = 10010 2

la representación en complemento a dos de ambos números será: ahora procedemos a sumarlos: -75 10110101 18 00010010 10110101 + 00010010 11000111 el resultado tiene un 1 en el bit más significativo por lo que es negativo. Para conocer el valor decimal: Ca2(1000111 2 ) = 0111000 + 1 2 = 111001 2 = 2 5 + 2 4 + 2 3 + 2 0 10 = 32 + 16 + 8 + 1 10 = 57 10 que si añadimos el signo - obtenemos -57, que es el resultado esperado: -75 + 18 = -57 En el caso de querer realizar la resta de dos números, no tenemos más que calcular el complemento a dos del número que queremos sustraer. De esta manera, le estamos cambiando el signo: si era positivo, se está calculando su equivalente en negativo; y si era negativo, al hacer de nuevo el complemento a dos, obtenemos el positivo. Una vez realizado esto no tenemos más que sumar los dos números. 1.3.4 Exceso Z En este sistema un número a será representado mediante el valor a+z. Es decir, se calcula a+z 10 y se almacena la representación en binario natural de éste número. A la constante Z se denomina exceso, de manera que en esta representación los números se almacenan con un exceso=z. Si n es el número de bits utilizados para almacenar un valor, Z se suele escoger como 2 n-1. En este caso, la representación obtenida es muy similar a la de complemento a dos, aunque el bit de signo es 0 para los negativos y 1 para los positivos. Este sistema tiene la ventaja de que la representación binaria de los números con signo mantiene la ordenación de los valores representados; las combinaciones binarias mayores representan a los números enteros más grandes. Esta propiedad hace que la representación en exceso Z se utilice frecuentemente para facilitar la comparación entre números.

Dado un número almacenado según este formato, para saber que valor está representando, simplemente habrá que restar Z al número decimal obtenido a partir del número en exceso Z considerado como binario natural. Vamos a calcular qué números están representados en los siguientes casos, si se ha utilizado un sistema exceso Z = 2 n-1 con n=6. 101001 Primero lo pasamos a decimal 1010012 = 4110 Y restamos el exceso para obtener el número representado 41-2 n-1 = 41-2 5 = 41-32 = 9 En las operaciones de sumas y restas se debe tener en cuenta: Al sumar dos números en exceso Z empleando las reglas de la aritmética binaria, se suman involuntariamente también los excesos, de manera que el resultado tiene un exceso 2Z, por tanto debe corregirse el resultado restándole Z. Al restar dos números en exceso Z, empleando las reglas de la aritmética binaria, se restan involuntariamente también los excesos, de manera que el resultado no tiene exceso (uno positivo por otro que se resta): debe corregirse el resultado sumándole Z. En la siguiente tabla se muestra el valor asociado a cada combinación de tres bits, en cada uno de los métodos de representación estudiados: binario natural signo y magnitud complemento a dos exceso 4 000 0 0 0-4 001 1 1 1-3 010 2 2 2-2 011 3 3 3-1 100 4-0 -4 0 101 5-1 -3 1 110 6-2 -2 2 111 7-3 -1 3 Fig. 1-11: Sistemas de representación de números enteros.

1.4 Representación de números reales Este apartado se va a dedicar a mostrar la forma de representar números reales, o más propiamente, racionales, que son aquellos que constan de una parte entera y otra fraccionaria, separados por una coma, según la notación tradicional. La forma de indicar el tamaño de cada uno de estas partes (y por tanto la situación de la coma) da lugar a dos tipos de representaciones: coma fija y coma flotante. 1.4.1 Coma fija En esta notación asignamos un tamaño fijo a los campos correspondientes a la parte entera y a la parte fraccionaria del número, es decir, un lugar fijo para la coma. Una vez elegida esta posición nunca se modifica con las operaciones. En un ordenador que disponga de 8 bits para representar valores reales, podríamos utilizar un formato con 5 bits para la parte entera y 3 bits para la fraccionaria: b 7 b 6 b 5 b 4 b 3,b 2 b 1 b 0 En este formato los siguientes 8 bits: 01101001 Representarían el número real indicado a continuación: 01101,001 2 = (2 3 + 2 2 + 2 0 + 2-3) 10 = = (8 + 4 + 1+ 0,125) 10 = 13,125 10 La mayor ventaja que ofrece esta representación es que las operaciones de sumar y restar siguen los mismos algoritmos que los números enteros. 10110,101 + 00010,010 11000,111 Dado que en esta representación la posición de la coma no se puede alterar, hay que conocer a priori con qué rango de magnitudes se va a trabajar, de forma que se sitúe la coma en el lugar apropiado. Esto hace que el sistema sea poco flexible y por lo tanto muy poco utilizado. 1.4.2 Coma flotante Para evitar los problemas de la representación anterior se suele utilizar un sistema que permita alterar la posición de la coma según las magnitudes que se quieran representar. Es frecuente en cálculos científicos encontrar números extremadamente grandes y también

muy pequeños; números que no podremos representar con el restringido rango de la coma fija. Para representar un amplio rango de valores empleando muy pocos dígitos, es bien conocida en el sistema decimal, la representación científica o exponencial. 1,35*10-7 -6,018*1022 Un número real N puede expresarse de la forma: donde: N = M * B E M es la mantisa B es la base del exponente E es el exponente En los ordenadores se suele utilizar un formato similar a éste para representar números reales, que se conoce como representación en coma flotante. En este sistema de representación un numero vendrá definido por tres elementos B, M y E, que a continuación pasamos a describir: 1.4.2.1 BASE DEL EXPONENTE El valor de B no debe confundirse con la base del sistema de numeración que siempre, en los ordenadores, es la binaria. B es la base que hay que elevar al exponente. Suele ser 2, pero también puede tomar otros valores. En un ordenador determinado, el valor de B está fijado de antemano y no puede ser alterado. Esto hace que se omita en la representación y no se almacene internamente. Por lo tanto, un número real N, se representará en un ordenador mediante los campos M y E, donde: M = mp-1 mp-2... m1 m0 ( p bits ) E = eq-1 eq-2... e1 e0 ( q bits ) que se interpreta como M * B E, donde B es la base fija del exponente en la que se trabaja. M y E expresan dos números con signo en cualquiera de los sistemas estudiados. Vamos a comentar los sistemas más empleados.

1.4.2.2 MANTISA Para la representación de M se suele emplear un sistema de representación de signo y magnitud, estando la magnitud en un sistema de coma fija. La coma se sitúa normalmente a la izquierda de la magnitud, es decir, sin parte entera: este caso se conoce como mantisa fraccionaria. Aún utilizando siempre mantisa fraccionaria, existen infinidad de formas de representar un mismo número. 0,275 * 10 3 0,0275 * 10 4 0,00275 * 10 5 Para evitar confusión, conviene elegir una de estas posibilidades como el estándar, de manera que la representación de un número real sea única. La solución adoptada se conoce como mantisa normalizada y consiste en desplazar la coma hasta que se sitúe a la izquierda del dígito más significativo que no sea cero. Por lo tanto, la única representación con mantisa normalizada, en los ejemplos anteriores, es la primera. Si una mantisa en binario está normalizada, obligatoriamente el bit más significativo será 1. Por lo tanto, en algunos ordenadores este bit no se almacena, dado que siempre es uno, permitiendo así representar un bit más en la mantisa. Se dice en este caso que la mantisa tiene un bit implícito. Esta condición de normalización implica que la mantisa del número cumple la siguiente relación: 0.5 M <1 1.4.2.3 EXPONENTE El exponente es un número entero. Para su representación podríamos utilizar cualquiera de las técnicas estudiadas, pero lo habitual es utilizar la representación en exceso Z, con Z=2 q-1. Sólo nos queda por conocer la ubicación de mantisa y exponente dentro del formato de coma flotante. El orden más utilizado es el siguiente: S E F 1 q p-1 donde S es un campo de un bit dedicado al signo de la mantisa, el campo E está dedicado al exponente y en el campo F se sitúa el resto de la mantisa (la magnitud).

Suponemos un formato de coma flotante con campos dispuestos como los anteriores, con p=9 y q=4, con mantisa fraccionaria normalizada con bit implícito, exponente en notación exceso 2 q-1 y base del exponente dos. Trataremos de descubrir qué número real se representa en el siguiente código binario: 1011001001000 Primero identificaremos cada uno de los campos; 1 0110 01001000 S E F La mantisa es negativa, dado que S=1. En el enunciado se nos dice que es fraccionaria, por lo que hay que situar la coma antes del primer bit. Además nos indican que tiene bit implicito, por lo que a la derecha de la coma hemos de insertar un 1, que no se ha incluido en la representación para ahorrar memoria. Por lo tanto la mantisa sería: -0,101001000 2 = -(2-1 + 2-3 + 2-6) 10 = = -(0.5+0.125+0,015625) 10 = -0,640625 10 El exponente está en exceso 2q-1 = 23 = 8, por lo que está representando el número: 0110 2-8 10 = 6 10-8 10 = -2 10 El número real que buscamos lo podemos obtener de la siguiente forma: N = M * BE = -0,640625 * 2-2 = -0,16015625 Tomando el sistema de representación del ejemplo anterior (p=9 y q=4) vamos a estudiar el rango de valores que se pueden almacenar: Disponemos de 10 bits para la mantisa, hay que reservar uno para el signo y añadir el bit implícito. Por lo que estará en el rango: 0,1000000002 = 0.510 la magnitud más pequeña 0,111111111 2 1 10 la magnitud más grande Los valores extremos del exponente son: 0000 -> 0-2 3 = -8 el valor más pequeño 1111 -> 15-2 3 = 7 el valor más grande Según los resultados anteriores el número más pequeño positivo que se puede representar es: 0,5 x 2-8 = 0,0019531 y el más grande: 1 x 2 7 = 128

Muchos de los ordenadores actuales cuentan con los circuitos necesarios para operar con números en coma flotante. Las operaciones básicas de suma, resta, multiplicación y división resultan algo complejas, por lo que algunos de los computadores de la gama baja, no cuentan con el hardware necesario para su tratamiento y estas operaciones se realizan mediante software. 1.5 Codificación de caracteres Hasta ahora hemos estudiado distintas formas en las que los ordenadores pueden representar internamente números. Sin embargo este no es el único tipo de información con la que pueden trabajar. Es muy frecuente por ejemplo procesar información en forma de texto. Este tipo de datos es almacenado por medio de una secuencia de caracteres, cada uno de los cuales suele ser codificado asignándole un código binario. 1.5.1 Código de caracteres ASCII Uno de los primeros convenios que se extendió para la representación de caracteres es el código ASCII (American Standard Code for Information Interchange). Se trata de un código de 7 bits, que permite por lo tanto representar hasta 2 7 = 128 caracteres. El la siguiente tabla se muestran los códigos, en decimal y hexadecimal, correspondientes a los 128 caracteres ASCII. La primera columna de esta tabla está formada por caracteres de control tales como salto de línea (LF), borrado (DEL), final de fichero (ETX),... etc. Estos caracteres no disponen de representación gráfica. El carácter número 32 (SP) corresponde al espacio en blanco. 1.5.1 El código ASCII extendido Cuando se empezaron a vender ordenadores fuera de EEUU, se cayó en la cuenta que los 128 caracteres ASCII no eran suficientes para trabajar con otros idiomas (al no contemplar acentos, eñe, cedilla, ). Por esta razón, los fabricantes comenzaron a usar un conjunto de caracteres ASCII ampliado de 8 bits (256 caracteres), que además coincidía con el tamaño de palabra de los procesadores de la época. Las 128 posiciones primeras seguían conteniendo el ASCII, pero en los 128 caracteres adicionales, que constituyen lo que se denomina ASCII extendido, añadieron todas las letras y signos especiales de uso común en lenguas de Europa occidental, como el español, francés o alemán.

decim. hexad. caract decim hexad. caract decim hexad. caract decim hexad. caract 0 00 NUL 32 20 SP 64 40 @ 96 60 ` 1 01 SOH 33 21! 65 41 A 97 61 a 2 02 STX 34 22 66 42 B 98 62 b 3 03 ETX 35 23 # 67 43 C 99 63 c 4 04 EOT 36 24 $ 68 44 D 100 64 d 5 05 ENQ 37 25 % 69 45 E 101 65 e 6 06 ACK 38 26 & 70 46 F 102 66 f 7 07 BEL 39 27 71 47 G 103 67 g 8 08 BS 40 28 ( 72 48 H 104 68 h 9 09 HT 41 29 ) 73 49 I 105 69 i 10 0A LF 42 2A * 74 4A J 106 6A j 11 0B VT 43 2B + 75 4B K 107 6B k 12 0C FF 44 2C, 76 4C L 108 6C l 13 0D CR 45 2D - 77 4D M 109 6D m 14 0E SO 46 2E. 78 4E N 110 6E n 15 0F SI 47 2F / 79 4F O 111 6F o 16 10 DLE 48 30 0 80 50 P 112 70 p 17 11 DC1 49 31 1 81 51 Q 113 71 q 18 12 DC2 50 32 2 82 52 R 114 72 r 19 13 DC3 51 33 3 83 53 S 115 73 s 20 14 DC4 52 34 4 84 54 T 116 74 t 21 15 NAK 53 35 5 85 55 U 117 75 u 22 16 SYN 54 36 6 86 56 V 118 76 v 23 17 ETB 55 37 7 87 57 W 119 77 w 24 18 CAN 56 38 8 88 58 X 120 78 x 25 19 EM 57 39 9 89 59 Y 121 79 y 26 1A SUB 58 3ª : 90 5A Z 122 7A z 27 1B ESC 59 3B ; 91 5B [ 123 7B { 28 1C FS 60 3C < 92 5C \ 124 7C 29 1D GS 61 3D = 93 5D ] 125 7D } 30 1E RS 62 3E > 94 5E ^ 126 7E ~ 31 1F US 63 3F? 95 5F _ 127 7F DEL Fig. 1-12: Tabla de caracteres ASCII. Por desgracia, en aquel momento no se siguieron estándares únicos, ni hubo una decisión internacional al respecto. Cada fabricante de ordenadores y software usó su propio código ASCII extendido. Con la aparición de las redes de ordenadores y en especial de Internet se vio la necesidad de establecer un estándar para la codificación de caracteres. Por este motivo se estableció la norma ISO 8859 que define varios juegos de caracteres ASCII extendidos para diferentes ámbitos geográficos (ver figura 2-10). El más empleado en la actualidad es el conocido como ISO Latin-1, se emplea en la mayoría de sistemas operativos como Windows y Linux o en la codificación de la mayoría de páginas Web. ISO 8859-1 (Latin-1) Europa occidental ISO 8859-2 (Latin-2) Europa países eslavos ISO 8859-3 (Latin-3) Europa suroriental ISO 8859-4 (Latin-4) Europa septentrional ISO 8859-5 Cirílico ISO 8859-6 Árabe ISO 8859-7 Griego ISO 8859-8 Hebreo Fig. 1-13: Juegos de caracteres del estándar ISO 8859.

1.5.1 Código de caracteres Unicode El estándar ISO 8859 vino a poner un poco de orden en el mundo de la codificación de caracteres, sin embargo no resolvió por completo el problema. En primer lugar en cada parte del mundo se utilizaba una codificación de caracteres diferente. En segundo lugar, un documento dado solo podía utilizar uno de los juegos de caracteres disponibles (con 256 caracters), por lo que resultaba imposible utilizar en un mismo documento caracteres castellanos (ISO Latin-1) y caracteres árabe (ISO Árabe). En consecuencia, resultaría imposible escribir una tabla como la que se muestra en la figura 2-11. in Arabic ما هي الشفرة الموحدة "يون كود" 什 麽 是 Unicode? in Chinese Kio estas Unikodo? in Esperanto Qu'est ce qu'unicode? in French რა არის უნიკოდი? in Georgian Τι είναι το Unicode? in Greek (Unicode)? in Hebrew מה זה יוניקוד य नक ड य ह? in Hindi Hvað er Unicode? in Icelandic ユニコードとは 何 か?in Japanese 유니코드에 대해? in Korean Што е Unicode? in Macedonian in Persian يونی ک د چيست Что такое Unicode? in Russian Qué es Unicode? in Spanish Vad är Unicode? in Swedish Unicode ค ออะไร? in Thai in Uyghur يۇنىكود دىگهن نىمه Fig. 1-14 Ejemplo de una misma frase expresada en diferentes idiomas (fuente: www.unicode.com). Para resolver de forma definitiva la codificación de todos los posibles caracteres se introdujo los códigos Unicode. Unicode proporciona un número único para cada carácter, sin importar la plataforma, sin importar el programa, sin importar el idioma. Para disponer de un conjunto de caracteres lo suficientemente grande cada código se define con 31 bits, lo que nos proporciona un total de 2 31 21 10 9 caracteres diferentes (aunque hasta la fecha solo se han definido unos 100.000). Los 256 primeros caracteres de Unicode coinciden con los caracteres ISO Latin-1. En consecuencia, los 128 primeros caracteres de Unicode coinciden con los caracteres ASCI. Existen varias alternativas para codificar los caracteres Unicode entre las que destacamos: UTF-32: En esta codificación cada carácter es almacenado utilizando 32 bits con el código correspondiente del carácter. Por lo tanto, cada carácter utilizará 4 bytes en lugar de 1 byte que se emplea en la codificación ASCII y ASCII extendida. UTF-8: En esta codificación cada carácter es almacenado utilizando un número de bytes diferentes dependiendo del rango en que se encuentre su código. Los caracteres entre el 0 y el 127, (que coinciden con los caracteres ASCII) se codificarán utilizando un solo byte. Los caracteres entre el 128 y el 2047 se almacenarán utilizando dos bytes. Los caracteres entre el 2048 y el 65535 utilizarán 3 bytes. Y así hasta un máximo de 6 bytes por carácter.

La figura 2-12 muestra los rangos disponibles así como la codificación empleada para cada uno de estos rangos. El primer rango abarca números de hasta 7 bit; se codificará en un byte introduciendo un 0 en el primer bit seguido del código correspondiente del carácter. El segundo rango abarca números de hasta 11 bits; se codificará en dos bytes, introduciendo en el primero los bits 110 seguidos de los primeros 5 bits del código y en el segundo los bits 10 seguidos de los 6 bits restantes del código. En la siguiente tabla puede consultarse la codificación empleada para el resto de los rangos: Rango (en hexadecimal) Codificación en UTF-8 00000000-0000007F: 0xxxxxxx 00000080-000007FF: 110xxxxx 10xxxxxx 00000800-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 00010000-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 00200000-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 04000000-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Fig. 1-15: Codificación de caracteres Unicode en UTF-8. Si por ejemplo quisiéramos codificar la palabra Año en UTF-8, sabiendo que los códigos Unicode de cada carácter son: A =41 16 =100 0001 2, ñ =F1 16 =1111 0001 2 y o =6F 16 =110 1111 2. Tanto el carácter A como el o son caracteres que se encuentran en el primer rango por lo que se almacenaran en un byte, poniendo un 0 en el primer bit, seguido de su código en binario. El carácter ñ se encuentra en el segundo rango por lo que se almacenará utilizando 2 bytes, tal y como se muestra a continuación: A Ñ o 0100 0001 1100 0011 1011 0001 0110 1111 En la siguiente figura se muestra la codificación de la palabra Año en cuatro de los sistemas de codificación de caracteres que han sido descritos: A ñ O ASCI 0100 0001???????? 0110 1111 No se puede! ISO Latin-1 A ñ O 0100 0001 1111 0001 0110 1111 Unicode UTF-32 A ñ o 0000 0000 0000 0000 0000 0000 0100 0001 0..0 0..0 0..0 1111 0001 Unicode A Ñ o UTF-8 0100 0001 1100 0011 1011 0001 0110 1111 Fig. 1-16: Codificación de la palabra Año utilizando diferentes sistemas.

1.6 Códigos detectores de errores Durante el almacenamiento, transmisión o manipulación de un código binario dentro de un sistema digital puede producirse errores que alteren el valor de uno o más bits del código original. El posterior proceso de estos datos erróneos puede generar resultados incorrectos. Para poder detectar la aparición de estos problemas se acostumbra a utilizar códigos detectores de errores. Veamos uno de los códigos detectores de errores más sencillos, los códigos de paridad: 1.6.1 códigos de paridad En estos códigos se añade un bit adicional en cada combinación del código original. A este bit se le llama el bit de paridad. Si optamos por el código de paridad par, dicho bit será tal que haga que el número total de unos (incluyendo el de paridad) sea par. En cambio, en el un código de paridad impar, dicho bit será tal que haga que el número total de unos (incluyendo el de paridad) sea impar. Por ejemplo, el código ASCII correspondiente al carácter A es 1000001. Si quisiéramos almacenarlo mediante un código de paridad par habría que añadir un bit más de forma que el número total de unos fuera par. Por lo tanto el código correspondiente sería 10000010. Si se produce un error en cualquiera de los bits, conducirá a un código con un número impar de unos por lo que el error podrá ser detectado, aunque no podrá ser corregido. Si transmitiéramos este carácter A sin utilizar el código de paridad y se cometiera un error en el tercer bit, el receptor interpretaría que se trata del carácter Q. Pero por el contrario si se hubiera utilizado el código de paridad par, el receptor detectaría un número impar de unos, por lo que detectaría la presencia de un error: sin código de paridad: ASCII A = 1000001 --error--> 1010001 = ASCII Q con código de paridad par: ASCII A = 10000010 --error--> 10100010 = no válido Los códigos de paridad solo consideran la posibilidad de que, al producirse el error, se altere un único bit. Se puede comprobar, cómo al alterar dos bits de una palabra este sistema no detectará el error. Estos códigos pueden utilizarse cuando, la probabilidad de que ocurran dos o más errores simultáneos en una misma palabra, sea extremadamente pequeña. En caso contrario, tenemos a nuestra disposición otros códigos muchos más fiables.