Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... ·...

23
Fundamentos de la Informática Algunos códigos usados habitualmente en informática 1 6 Algunos códigos usados habitualmente en informática 1 CONCEPTOS GENERALES En este apartado vamos a estudiar una serie de características comunes a todos los códigos que se desarrollarán en los apartados siguientes. 1.1 Tipos de información - Tipos de códigos En las lecciones anteriores fue introducido el concepto de código, sus distintas clases y cómo éste nuevo elemento se vincula con las fuentes de información. En esta lección se establecerá la primera relación entre la codificación de la información y los ordenadores. Para ello sólo habrá de tenerse en cuenta el objetivo principal del ordenador: procesar información. La necesidad del uso de códigos es evidente si se tiene en cuenta que el ordenador sólo "entiende" palabras construidas a partir de un alfabeto binario, mientras que las informaciones que debe procesar pertenecen al mundo real y están lejos de ser magnitudes binarias. A la hora de procesar información un ordenador trabaja con dos tipos de informaciones: instrucciones, que le dicen qué debe de hacer, y datos (operandos) sobre los que opera. Estas informaciones son introducidas al ordenador mediante cantidades numéricas y caracteres (para entender esto basta con observar los elementos básicos que componen cualquier programa de alto nivel). Se tiene, entonces, que hay que representar básicamente dos tipos de informaciones: - Cantidades, para lo cual se usan los denominados códigos numéricos. - Caracteres: letras, caracteres de control, símbolos de puntuación, etc, que se representan mediante los códigos alfanuméricos. A nivel conceptual los códigos alfanuméricos no presentan ninguna dificultad, ya que por muy grande que sea el número de caracteres a representar, siempre será finito, por lo que el único problema reside en consensuar entre la comunidad informática que combinación binaria se asigna a cada carácter. Al final del tema se expondrá la norma ASCII por ser una de las más comunes. Las dificultades aparecen a la hora de representar cantidades, ya que al ser su número infinito habrá que llegar a una serie de compromisos que caracterizarán y delimitarán el rango de aplicación de cada código numérico. Dada la importancia de este tipo de códigos vamos a exponer, a continuación, sus rasgos más generales.

Transcript of Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... ·...

Page 1: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 1

6

Algunos códigos usados habitualmente

en informática 1 CONCEPTOS GENERALES

En este apartado vamos a estudiar una serie de características comunes a todos los códigos que se desarrollarán en los apartados siguientes. 1.1 Tipos de información - Tipos de códigos

En las lecciones anteriores fue introducido el concepto de código, sus distintas clases y cómo éste nuevo elemento se vincula con las fuentes de información. En esta lección se establecerá la primera relación entre la codificación de la información y los ordenadores. Para ello sólo habrá de tenerse en cuenta el objetivo principal del ordenador: procesar información. La necesidad del uso de códigos es evidente si se tiene en cuenta que el ordenador sólo "entiende" palabras construidas a partir de un alfabeto binario, mientras que las informaciones que debe procesar pertenecen al mundo real y están lejos de ser magnitudes binarias.

A la hora de procesar información un ordenador trabaja con dos tipos de informaciones: instrucciones,

que le dicen qué debe de hacer, y datos (operandos) sobre los que opera. Estas informaciones son introducidas al ordenador mediante cantidades numéricas y caracteres (para entender esto basta con observar los elementos básicos que componen cualquier programa de alto nivel). Se tiene, entonces, que hay que representar básicamente dos tipos de informaciones:

- Cantidades, para lo cual se usan los denominados códigos numéricos.

- Caracteres: letras, caracteres de control, símbolos de puntuación, etc, que se representan mediante los códigos alfanuméricos.

A nivel conceptual los códigos alfanuméricos no presentan ninguna dificultad, ya que por muy grande

que sea el número de caracteres a representar, siempre será finito, por lo que el único problema reside en consensuar entre la comunidad informática que combinación binaria se asigna a cada carácter. Al final del tema se expondrá la norma ASCII por ser una de las más comunes.

Las dificultades aparecen a la hora de representar cantidades, ya que al ser su número infinito habrá que llegar a una serie de compromisos que caracterizarán y delimitarán el rango de aplicación de cada código numérico. Dada la importancia de este tipo de códigos vamos a exponer, a continuación, sus rasgos más generales.

Page 2: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 2 1.2 Representación de cantidades. Códigos numéricos

El principal problema reside en el hecho de que tanto los dispositivos de almacenamiento, como los de procesamiento de un ordenador son de naturaleza finita, por lo que la consecuencia inmediata es que la longitud de la palabra de código ha de ser igualmente finita. A las cantidades representadas con esta limitación espacial se las conoce con el nombre de números de precisión finita.

Esta precisión finita implica la existencia de dos propiedades importantes de los códigos numéricos:

- Rango de representación limitado: existirá un límite superior B (máxima cantidad representable) y un límite inferior A (mínima cantidad representable) (Figura 1).

- El número de cantidades representables dentro del rango permitido es finito; es lo que se conoce como representación no densa (Figura 1).

A B

Figura 1

Cada una de estas limitaciones define un tipo de error a la hora de representar una determinada cantidad

C:

- Error de desbordamiento. Ocurre cuando la cantidad no pertenece al intervalo de representación: C > B o C < A.

- Error de redondeo. Cuando C cae entre dos valores representables, habrá que aproximarla por uno de estos, cometiendo el denominado error de redondeo. Cuantitativamente valdrá:

Errorred = | cantidad a representar - cantidad representada |

A partir de este error se define la precisión de una determinada representación como la

diferencia entre dos cantidades representables consecutivos. Este valor se corresponde con el máximo error de redondeo que se puede cometer, o, dicho de otra forma, con la máxima precisión con que puede ser representado un número.

Otra propiedad, independiente de lo visto hasta ahora, que caracteriza a un código numérico es

la naturaleza de los números que es capaz de representar. Especial atención merece el caso de los números reales. La aparición de números fraccionarios impone la necesidad de poder diferenciar entre parte entera (izda. del punto decimal) y parte decimal (drcha. del punto decimal). En la nomenclatura algebraica habitual, ambas partes se separan mediante un símbolo especial, generalmente un punto o una coma. En la representación binaria de este tipo de cantidades se carece de esta posibilidad, ya que el alfabeto de símbolos sólo consta, como sabemos, de dos elementos. ¿Qué hacer, entonces, para separar la parte entera de la parte fraccionaria? La primera solución es el punto fijo .

• Punto fijo . El punto decimal se fija en una determinada posición de la palabra de código. Los dígitos binarios situados a la izquierda de esta posición representa a la parte entera , y los situados a la derecha (incluyendo el de la posición fijada) a la parte decimal.

Page 3: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 3

El problema de este tipo de representación surge cuando las cantidades a representar son muy pequeñas o muy grandes, ya que las longitudes de palabra de código necesarias son intratables. Para solucionar esta limitación surge una segunda forma de representar números reales: el punto flotante.

• Punto flotante. La resolución del problema nos la proporciona la representación exponencial o científica. Efectivamente, partamos de nuestra experiencia. La escritura de muy grandes y muy pequeñas cantidades con todas sus cifras supone un gran gasto de papel y paciencia, además, normalmente no estamos interesados, o no se conoce la magnitud con la precisión suficiente como para tener que escribirla con todos sus guarismos. Lo que hacemos en estos casos es utilizar una notación exponencial que compacta en gran medida la representación. Por ejemplo, para representar la masa del electrón o la del sol no escribimos:

me = 0.0000000000000000000000000009 gr. msol = 2000000000000000000000000000000000 gr.

Si no que lo hacemos de la siguiente manera:

me = 9 ⋅ 10-28 gr. msol = 2 ⋅ 10 33 gr.

Vemos que la ganancia en espacio es evidente. Esta es la filosofía que se aplica en la representación punto flotante. Se representa la cantidad puesta de la forma:

± m b e donde m = mantisa en valor absoluto.

b = base del exponente. e = exponente.

Como el ordenador trabaja con aritmética binaria, las propiedades de ésta hacen que b = 2 (multiplicar o dividir por 2 a una combinación binaria, tiene el mismo efecto que multiplicar o dividir por 10 a un número en decimal). Como esta asignación es fija, se da por sobreentendida, de forma que la base no será representada. Nos queda, por lo tanto, que una cantidad en la forma vista, queda perfectamente caracterizada si se especifica el valor del signo, de la mantisa y del exponente. En esto se basa la codificación en punto flotante, la palabra de código se divide en tres partes, en cada un de las cuales se representa, por separado y de la forma adecuada, el signo, la mantisa y el exponente.

Las características diferenciadoras de esta representación son:

* La densidad de puntos no es constante a lo largo del intervalo de representación: la distancia entre dos valores representados será menor en zonas cercanas al cero (exponentes pequeños), que en las zonas mas alejadas (exponentes grandes).

* Directamente de lo anterior se deduce que la precisión variará a lo largo del intervalo de representación.

* De forma general se puede decir que la precisión, vista cono el número de cifras significativas con que se representa la magnitud, depende de la mantisa y el rango de representatividad del exponente.

Page 4: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 4 1.3 Qué clase de código usar

De lo visto en la asignatura hasta aquí, parece conveniente el uso de códigos compactos, puesto que son los más eficientes. Antes de dar una respuesta precipitada, examinemos un poco más en profundidad el proceso de codificación que tenemos planteado.

El primer problema que surge en este punto, es que al querer crear códigos de uso general solo se conoce el número de caracteres, o el rango y precisión con que se quiere representar las cantidades, pero no cual va a ser la fuente generadora de esas informaciones. Dicho de otra forma, a priori solo se puede conocer el número de símbolos a representar pero no sus probabilidades de aparición.

Otra cuestión a tener en cuenta, es que en el uso real de un código interesa que los procesos de codificación y decodificación sean lo más sencillos posibles. Para que esto se vea favorecido se hace que todas las palabras del código sean de igual longitud.

Cualquiera de estas dos razones hace inviable la búsqueda de códigos compactos, por lo que el interés se centra en los instantáneos, clase a la que pertenecen todas las representaciones que veremos en este tema; sólo cuando se apliquen a fuentes de características muy particulares se convertirán en códigos compactos. 1.4 Longitud de la palabra de código

Con carácter general, sólo se puede dar respuesta al problema de calcular la longitud de palabra necesaria para codificar un determinado número de símbolos o cantidades distintas. El "sólo" anterior no resta aplicación a este apartado, ya que la situación planteada es bastante común en la practica.

Dados M objetos o informaciones distintas a representar, necesitamos un número n de dígitos binarios

tal que cumpla:

(M ≤ 2n)n mínimo

Donde 2n es el número de combinaciones distintas que podemos formar con n dígitos binarios. La

anterior desigualdad sale de la propiedad que debe cumplir todo código para poder ser instantáneo y de longitud de palabra constante, de que debe haber más combinaciones binarias (elementos en el conjunto imagen), que objetos o símbolos a codificar (elementos en el conjunto origen), sólo así podemos asegurar que a cada elemento del conjunto origen se le puede asignar un elemento distinto del conjunto imagen.

Para acabar, hacer notar que el código así creado será compacto cuando se aplique sobre una fuente de

M símbolos equiprobables, y, además, cumpla que lg M sea un número entero. Establecidas sus características generales, pasamos a describir alguno de los códigos más habituales en

la informática.

2 CÓDIGOS NUMÉRICOS 2.1 Sistemas de numeración

Son capaces de representar números reales positivos.

Page 5: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 5

Se basan en la posibilidad que se tiene de poder representar cualquier cantidad N de objetos, mediante un polinomio de la forma siguiente:

Donde b es la base del sistema de numeración. Para llegar a esta representación se opera como sigue:

A.- Para la parte entera (exponentes positivos).

1. Se agrupan los N objetos en paquetes de b unidades cada uno. El número de objetos que sobren de esta agrupación es a0.

2. Los paquetes resultantes se vuelven a agrupar en nuevos paquetes de b objetos. El número de paquetes que no se puedan agrupar en nuevos paquetes de b2 objetos será a1.

3. Se sigue operando así sucesivamente con paquetes de b3, b4, ... objetos, obteniendo los valores de a2, a3, ...

B.- Para la parte fraccionaria (exponentes negativos).

1. Se mira cuantas porciones de tamaño b-1 caben dentro de la fracción a representar. A este número le hemos llamado a-1.

2. Si la parte fraccionaria no es múltiplo entero de b-1, sobrará un "trozo" de tamaño inferior a b-1. Se mira cuantas porciones de tamaño b-2 caben dentro de esa parte sobrante. Este número será a-2.

3. se sigue operando así, hasta que la parte fraccionaria quede perfectamente cubierta, o hasta que el "trozo" sobrante sea de un tamaño inferior a la precisión con la que queremos representar la cantidad. Esta última condición se traduce, en los números de precisión finita, en que el número de coeficientes a-i extraídos, sea igual al número de símbolos reservados para la parte decimal en la palabra de código.

Es fácil comprobar como una vez fijada la base (b), la cantidad queda completamente caracterizada

conociendo el valor de cada coeficiente ai. Aprovechando esta propiedad, aligeramos notación, representando la cantidad simbólicamente de la siguiente manera:

N = ap-1ap-2...a2a1a0 . a-1a-2a-3...

A este tipo de notación se le llama notación posicional, ya que el valor de cada dígito viene determinado por su valor numérico en sí (cantidad asociada a ese símbolo), y por su posición dentro de la palabra.

Dadas las características de formación del polinomio generador, cada coeficiente ai sólo podrá tener b valores distintos; necesitamos, por lo tanto, un alfabeto de b símbolos distintos para poder representar cada uno de esos valores de ai. 2.1.1 Distintos sistemas de numeración.

Vamos a concretar todo lo expuesto, desarrollando los sistemas de numeración más útiles en informática.

b a + ... + b a + b a + b a + ... + b a + b a = b a = N q-q-

1-1-

00

11

2-p2-p

1-p1-p

ii

1-p

-q=i∑

Page 6: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 6

• Sistema decimal o base 10

Para este sistema b = 10, por lo que el polinomio generador queda: El alfabeto de símbolos utilizados para representar los 10 valores numéricos distintos que puede tener ai

es: ai=0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Ej. El desarrollo polinómico de la cantidad 1045.106 sería:

1045.106(10 = 1⋅103 + 0⋅102 + 4⋅101 + 5⋅100 + 1⋅10 -1 + 0⋅10 -2 + 6⋅10 -3

El subíndice añadido al final de la representación de la cantidad indica la base usada. Este será el

convenio de notación que se seguirá para indicar este aspecto, en todos los casos.

• Sistema binario o base 2

Fue el matemático alemán Leibnitz quien introdujo en el siglo XVII este sistema de numeración, cuya base es el 2. La cantidad se representa, por lo tanto, en base a potencias de dos:

Cada coeficiente puede tener 2 valores numéricos distintos (cero objetos u un objeto), se escoge el siguiente alfabeto de símbolos para su representación: ai=0, 1. En principio la elección de estos símbolos es arbitraria, se escoge el alfabeto indicado porque es el más lógico para el entendimiento humano: es inmediato para nosotros ver la cantidad representada por cada dígito. Este razonamiento es aplicable al resto de sistemas de numeración que veremos.

Las razones de Leibnitz para recomendar el sistema binario parece que fueron de tipo místico. Consideró que había algo de belleza en la analogía entre el "0", que representa el vacío, y el "1" que representaba a la divinidad. Independientemente de las razones de Leibnitz, el sistema binario ha sido en informática, dada la facilidad para crear dispositivos físicos que puedan estar en dos estados diferenciados.

Ej. La cantidad 9.25(10 objetos queda desarrollada en potencias de dos mediante el siguiente polinomio:

9.25(10 = 1⋅23 + 0⋅22 + 0⋅21 + 1⋅20 + 0⋅2 -1 + 1⋅2 -2

Su representación simbólica usando notación posicional sería: 9.25(10 = 1001 .01(2

En la pregunta anterior se habló de dos características importantes de cualquier representación numérica con precisión finita: el rango y la precisión. El cálculo de estas se puede realizar para cualquiera de los sistemas de numeración, pero dado que conceptualmente éste no varía de uno a otro, y la importancia

10 a = N ii

1-p

-q=i∑

2 a = N ii

1-p

-q=i∑

Page 7: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 7 que tiene la representación binaria, sólo vamos a hallar sus valores para este caso. La extensión al resto de sistemas es inmediata. Para calcular ambos valores vamos a usar una palabra genérica de código con p dígitos de parte entera, y q de decimal (ap-1 ... a0.a-1 ... a-q). Bajo estas circunstancias: Rango. [A,B]

A = menor cantidad representable. Se obtiene cuando todos los coeficientes del polinomio alcanzan su valor mínimo, en este caso el 0. Sustituyendo, se obtiene:

B = mayor cantidad representable. Se obtiene cuando todos los coeficientes del polinomio alcanzan su

valor máximo, el 1. Luego: Precisión.

La diferencia entre dos valores representables consecutivos, se corresponde con el valor de la mínima cantidad representable distinta de cero. En notación binaria esta cantidad será:

ap-1 ... a0 . a-1 ... a-q 0 ... 0 . 0 ... 1

que sustituyendo en el polinomio, nos dará que el valor de la precisión, en decimal, será igual a 2-q.

• Sistema octal o base 8

Este sistema usa base 8, con el siguiente alfabeto de coeficientes: ai=0, 1, 2, 3, 4, 5, 6, 7. El polinomio generador quedará:

Ej. Vamos a representar la cantidad 467.375(10 en octal. Generemos primero el polinomio:

467.375(10 = 7⋅82 + 2⋅81 + 3⋅80 + 3⋅8 -1

Por lo que extrayendo los coeficientes quedará: 467.375(10 = 723.3(8 • Sistema hexadecimal o base 16

Como la base es 16, el polinomio generador quedará: El alfabeto de símbolos para representar las 16 cantidades distintas que puede tener ai, será: ai=0, 1,

2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Donde cada guarismo lleva asociada una cantidad que coincide con su interpretación en decimal (igual que en los casos anteriores) y las letras llevan asociados los siguientes valores numéricos: A→10, B→11, C→12, D→13, E→14, F→15.

8 a = N ii

1-p

-q=i∑

0 = 20 = N i1-p

-q=i

•∑

) 2 - 1 ( + ) 1 - 2 ( = 21 = N q-pi1-p

-q=i

•∑

16 a = N ii

-1p

-q=i∑

Page 8: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 8

Ej. La representación hexadecimal de la cantidad 45990.65625(10 será:

45990.65625(10 = B⋅16 3 + 3⋅16 2 + A⋅16 1 + 6⋅16 0 + A⋅16 -1 + 8⋅16 -2 45990.65625(10 = B3A6.A8(16

La utilidad en informática tanto de este sistema, al igual que la del anterior, radica en el hecho de que al

ser las bases potencias enteras de 2, el cambio de representación de estos a binario, y viceversa, es muy simple. Aprovechando esta característica en numerosas ocasiones se sustituye la representación binaria por la octal o hexadecimal, logrando, así, una economía en el número de dígitos a representar. 2.1.2 Cambio de base de representación

Se trata de, dada una cantidad, obtener su representación en una cualquiera de las bases. La información en sí no varía, sólo lo hace su representación. a) De octal, binario y hexadecimal a decimal

Es inmediato a partir de lo expuesto: basta con sustituir en el polinomio generador, con la base adecuada en cada caso.

Ej. De octal a decimal: 35.27(8 = 3⋅8 1 + 5⋅8 0 + 2⋅8 -1 + 7⋅8 -2 = 29.734375(10

De binario a decimal:

1011.011(2 = 1⋅2 3 + 0⋅2 2 + 1⋅2 1 + 1⋅2 0 + 0⋅2 -1 + 1⋅2 -2 + 1⋅2 -3 = 11.375(10

De hexadecimal a decimal: BEBE.05(16 = B⋅16 3+E⋅16 2+B⋅16 1+E⋅16 0+0⋅16 -1+5⋅16 -2 = 48830.01953125(10

b) De octal a binario

Se sustituye literalmente cada símbolo octal de la palabra, por la codificación en binario de la cantidad a la que representa (Tabla 1).

Combinación binaria Dígito octal 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7

Tabla 1 Ej. 7 5 6 . 1 2 4(8 = 111 101 110 . 001 010 100(2

c) De hexadecimal a binario

Se realiza de la misma forma que en el caso anterior, pero ahora con los símbolos hexadecimales. La representación binaria de la cantidad asociada a cada símbolo hexadecimal se puede ver en la Tabla 2.

Page 9: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 9

Ej. 1 7 A 4 . E 9(16 = 0001 0111 1010 0100 . 1110 1001(2

d) De decimal a binario

Existen dos métodos.

( I ) Se deriva directamente del polinomio de definición de números binarios, y consiste en extraer las potencias de 2 que forman el número. Para ello, se resta la potencia de dos más grande que sea menor que el número. Al resultado de la resta, se le vuelve a restar la potencia de dos más grande, pero menor que él. Este proceso se repite hasta obtener un cero o el número de decimales deseado. El número binario se construirá asignando 1 a las posiciones correspondientes a las potencias de 2 empleadas, y 0 a aquellas no empleadas.

Ej. N = 125.385(2

125.385 - 2 6 ( 64) = 61.385 61.385 - 2 5 ( 32) = 29.385 29.385 - 2 4 ( 16) = 13.385 13.385 - 2 3 ( 8) = 5.385 5.385 - 2 2 ( 4) = 1.385 26 25 24 23 22 21 20 2-12-22-3 . . . 2-7 1.385 - 2 0 ( 1) = 0.385 125.385(10=1 1 1 1 1 0 1 . 0 1 1 0 0 0 1(2 0.385 - 2-2 (0.250) = 0.135 0.135 - 2-3 (0.125) = 0.01 0.01 - 2-7 ( ... ) = 0.0021875

( II ) Se divide en dos partes, una para enteros y otra para decimales. Consiste en seguir, para cada parte,

los pasos ya indicados (subapartado 2.1), para obtener el polinomio generador de la cantidad a representar.

Enteros. Se divide el número sucesivamente por dos. Los restos se corresponderán con los valores de los coeficientes del polinomio.

Ej. Cojamos el mismo número que antes. La parte entera será 125(10

Dígito hexadecimal

Combinación

binaria Dígito hexadecimal

Combinación

binaria

0

0000

8

1000 1

0001

9

1001

2

0010

A(10(10)

1010 3

0011

B(11(10)

1011

4

0100

C(12(10)

1100 5

0101

D(13(10)

1101

6

0110

E(14(10)

1110 7

0111

F(15(10)

1111

Tabla 2

Page 10: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 10

125 : 21 (a0 ) 1 62 : 2

(a1 ) 0 31 : 2 (a2 ) 1 15 : 2 125(10 = 1111101(2

(a3 ) 1 7 : 2 (a4 ) 1 3 : 2 (a5 ) 1 1 : 2 (a6 ) 1 0

Decimales. Se toma la parte decimal y se multiplica por dos. Se toma la parte entera del número

resultante y con la parte decimal se repite la operación hasta obtener un cero o bien la precisión adecuada. La representación binaria se corresponderá con la secuencia de partes enteras generadas.

Ej. Siguiendo con el ejemplo anterior, la parte decimal del número a representar es 0.385.

0.385 ⋅ 2 = 0.77 → 0 0.770 ⋅ 2 = 1.54 → 1 0.540 ⋅ 2 = 1.08 → 1 0.080 ⋅ 2 = 0.16 → 0 0.385(10 ≈ 0.0110001(2 0.160 ⋅ 2 = 0.32 → 0 0.320 ⋅ 2 = 0.64 → 0 0.640 ⋅ 2 = 1.28 → 1

. . .

1 La notación utilizada es: dividendo : divisor

resto cociente

El resultado final se obtiene uniendo los resultados parciales de cada parte:

N = 125.385(10 ≈ 1111101.0110001(2 e) De binario a octal

Se toman los dígitos en grupos de tres, del punto hacia la izquierda y del punto hacia la derecha. Cada grupo se sustituye por su equivalente octal (Tabla 1). Es el método recíproco del de octal a binario.

Ej. 11101001101.0011011111(2 = 011 101 001 101 . 001 101 111 100(2 = 3515.1574(8 f) De hexadecimal a octal

Basta con hacer el paso intermedio a binario, es decir: hexadecimal → binario → octal. g) De decimal a octal

Lo más frecuente es usar el mismo método que el (II) explicado para el caso de decimal a binario, salvo que ahora la base es 8 en vez de 2.

Page 11: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 11

Ej. N = 185.1875(10

Parte entera: Parte decimal:

185 : 8 0.1875 ⋅ 8 = 1.5 → 1 1 23 : 8 185(10 = 271(8 0.5 ⋅ 8 = 4.0 → 4 0.1875(10 ≈ 0.14(8

7 2 : 8 2 0

Uniendo ambas partes: N = 185.1875(10 ≈ 271.14(8

h) De binario a hexadecimal

Es el mismo proceso que el descrito para pasar de binario a octal salvo que los dígitos se toman de cuatro en cuatro, para ser sustituido, cada grupo, por su equivalente hexadecimal (Tabla 2).

Ej. 1001100000111111.11001(2 = 1001 1000 0011 1111 . 1100 1000(2 = 983F.C8(16 i) De decimal a hexadecimal

Igual que de decimal a binario o a octal, pero usando base 16.

Ej. N = 129.0535(10 Parte entera: Parte decimal:

129 : 16 0.0535 ⋅ 16 = 0.856 → 0 1 8 : 16 129(10 = 81(16 0.856 ⋅ 16 = 13.696 → D 0.0535(10 ≈ 0.0DB(16

8 0 0.696 ⋅ 16 = 11.136 → B

Uniendo ambas partes: N = 129.0535(10 ≈ 81.0DB(16 2.2 Representación de números reales en punto fijo

Todos los códigos que veremos permiten la representación de números reales, tanto positivos como negativos, en punto fijo, si bien es conveniente indicar que su uso en la práctica suele ser para representar cantidades enteras. 2.2.1 Signo-Magnitud

Se deriva directamente de la forma de representar el signo en decimal, o sea, mediante símbolos especiales añadidos al número: + → número positivo, - → número negativo. Al carecer en binario de la posibilidad de añadir símbolos distintos del 0 o del 1 (los circuitos del ordenador sólo distinguen entre dos estados distintos), este método se basa en reservar un dígito binario de la palabra de código para codificar el signo del número. El convenio seguido es: 0→positivo, 1→negativo. Normalmente, el signo es el dígito de más a la izquierda, mientras que el resto de los dígitos binarios representan, en binario natural, el valor absoluto de la cantidad a codificar:

2 a (-1) = a ... aa.aa ... aa = N ii

2-p

-q=i

aq-2-1-012-p1-p

1-p ∑

Page 12: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 12

Ej. Interpretando las siguientes combinaciones binarias como pertenecientes a este código, están representando a la cantidad que se indica:

01100 → +12(10 11100 → -12(10

011001.11→ +25.75(10 111001.11→ -25.75(10

Rango

Partamos de una palabra de código genérica de p dígitos binarios a la izquierda del punto y q a la derecha, como siempre. Bajo estas circunstancias, p+q-1 dígitos sirven para representar la magnitud y el restante para el signo. Supongamos que éste es el de más a la izquierda, al que se denomina más significativo. Se tiene que, en valor absoluto, la mayor cantidad representable es (2p-1 - 1)+(1 - 2-q); el rango de la representación será:

[ -((2p-1 - 1)+(1 - 2-q)) , (2p-1 - 1)+(1 - 2-q) ] Existen 2p+q-1 números positivos y 2p+q-1 números negativos. Precisión

Es la misma que en la representación binario natural: 2-q.

Este método de codificación tiene dos inconvenientes fundamentales:

- Existen dos representaciones para el cero:

0 00 ... 0 = +0 1 00 ... 0 = -0

- Debido al diferente tratamiento de sumas y restas, necesita circuitos diferentes para realizar estas operaciones.

Para intentar paliar en alguna medida estos inconvenientes, surgen las representaciones en

complemento, que veremos a continuación. Lo que se pretende es conseguir una representación binaria B del número -X(10, partiendo de la A del número X(10, de forma que A+B=C, donde C es la representación binaria del número 0(10. 2.2.2 Coma fija con complemento a la base menos uno

Se define el complemento a la base menos uno de cierto número A (Cb-1(A)), como el número que resulta de aplicar la siguiente operación sobre A:

Cb-1(A) = b p - b-q - A con b=base del sistema de numeración. p=número de dígitos de la parte entera de A. q=número de dígitos de la parte decimal de A.

( A=ap-1ap-2 ... a0.a-1 ... a-q )

Conceptualmente, el Cb-1(A), así definido, es una aplicación biyectiva del conjunto de los reales en sí mismo: Cb-1: ℜ→ℜ, conservando la base de representación. Es una simple operación, que aplicada sobre

Page 13: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 13 una determinada combinación de símbolos en una representación, nos da otra combinación de símbolos en la misma representación.

Ej. En b=10, la operación complemento a 9 para números con parte decimal queda: C9(235.05)=10

3 - 10 -2 - 235.05=764.94 C9(764.94)=10

3 - 10 -2 - 764.94=235.05

Este ejemplo nos permite ver una propiedad importante de esta aplicación: Cb-1(A)=B ⇔ Cb-1(B)=A.

En el caso de b=2 (sistema binario, que es el de interés para nosotros), se habla de complemento a 1: C1(A) = 2p - 2-q - A Aplicando la aritmética binaria, que se estudiará en Fundamentos de Informática II, se demuestra que el

resultado de esta operación es, simplemente, el cambio de los 0´s por 1´s y los 1´s por 0´s en A.

Ej. C1(1010.11) = 0101.00 C1(0101.00) = 1010.11

Definida la operación C1, pasamos a describir el método de representación de números reales, basado en

esta operación. En un código complemento a 1 la asignación palabra de código↔cantidad se realiza: - Si la palabra de código empieza por 0 (el dígito más significativo es 0), se la identifica con la cantidad

resultante de la interpretación en binario natural de esa combinación binaria. - Si la palabra empieza por 1, se la identifica con cantidades negativas, de la siguiente manera: sea B

cualquiera de estas combinaciones binarias. Se tiene que existirá alguna combinación A del código que empieza por 0, tal que C1(A)=B. Como se vio en el punto anterior, A representará a una cantidad positiva X(10. Entonces, a B se le asigna la cantidad -X(10.

Ej. Código complemento a 1, con una longitud de palabra de 4 dígitos de los cuales 2 son para la parte entera y 2 para la parte decimal:

00.00 → 0.0(10 10.00 → -1.75(10 00.01 → 0.25(10 10.01 → -1.5(10 00.10 → 0.5(10 10.10 → -1.25(10 00.11 → 0.75(10 10.11 → -1.0(10 01.00 → 1.0(10 11.00 → -0.75(10 01.01 → 1.25(10 11.01 → -0.5(10 01.10 → 1.5(10 11.10 → -0.25(10 01.11 → 1.75(10 11.11 → -0.0(10

Rango

Para una palabra de código con el formato general siempre reseñado hasta ahora:

[ -((2 p-1-1)+(1-2 -q)) , (2 p-1-1)+(1-2 -q) ]

Page 14: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 14 Precisión

Igual que siempre: 2 -q. Características generales de esta representación:

- El dígito más significativo de toda combinación que representa a un número positivo, vale 0. El dígito más significativo de cualquier combinación que representa a un número negativo, vale 1. Se deduce inmediatamente, que, sin ser un dígito de signo, el de más a la izquierda hace las veces de éste, ya que nos indica el signo de la cantidad representada.

- Ventaja frente al anterior: a la hora de operar con este tipo de código, sólo necesitamos un circuito sumador, ya que la resta se transforma en suma sin más que hacer: A-B=A+(-B).

- Por contra, siguen existiendo dos representaciones para el 0.

Advertencia. Un error muy común es sacar la siguiente conclusión: los números positivos se representan en binario natural y los negativos como el complemento a 1 de la correspondiente combinación en binario natural. Esta afirmación es inexacta, ya que aplicada literalmente llevaría, por ejemplo, a que la combinación que representa a la cantidad -5 sería:

5(10 = 101(2 ⇒ 010 → -5(10

C1(101)=010

Conviene recordar, que tal como se genera el código complemento a 1, toda combinación que represente a un número positivo empieza por 0 y la que representa a uno negativo por 1: las asignaciones hechas nunca pueden pertenecer a un código complemento a 1.

Esta identificación automática de C1 con número negativo no es cierta: no siempre el complemento a 1 de una combinación que representa a un número positivo, representa a un número negativo. La operación C1 es una simple aplicación entre dos conjuntos de combinaciones binarias. Sólo cuando se emplea para construir un código complemento a 1, siguiendo ciertos criterios, tiene sentido su utilización para hallar combinaciones que representen números negativos.

La representación correcta del 5 mediante un código complemento a 1 necesita como mínimo de 4 dígitos, si no su dígito más significativo nunca podría ser cero:

5(10 = 0101(2 ⇒ 1010 → -5(10

C1(0101) = 1010 2.2.3 Complemento a la base

Conceptualmente se basa en los mismos principios que el caso anterior, sólo varía la operación complemento aplicada. Se define el complemento a la base de un cierto número entero A (Cb(A)), como el número que resulta de aplicar sobre A la siguiente operación:

Cb(A) = b p -A = Cb-1(A) + 2 –q con A = ap-1ap-2 ... a0.a-1 ... a-q b = base del sistema de numeración.

Page 15: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 15

Es, nuevamente, fácil ver que Cb: ℜ→ℜ, conservando la base de representación.

Ej. Para b=10:

C10 (235.05) = 10 3 - 235.05 = 764.95 C10 (764.95) = 10 3 - 764.95 = 235.05

Cumple la misma propiedad que la indicada para el caso del Cb-1. Para b=2, se habla del complemento a 2 de números representados en binario. Dada una cierta cantidad

A, su C2 es: C2(A)=2p-A=C1(A)+1. Aplicando aritmética binaria se llega a que una forma rápida de obtener el C2 de A es: empezando por la derecha, se deja la combinación tal como está hasta el primer 1, y a partir de ahí se complementa, o sea, se cambian los unos por ceros y viceversa.

Ej. C2 (101.01) = 010.11 C2 (010.11) = 101.01 C2 (0100.0100) = 1011.1100

El uso de esta operación para representar número reales, se concreta en los denominados códigos

complemento a 2. Los criterios seguidos para la asignación palabra de código↔cantidad, son los mismos que los utilizados en la creación de los códigos complemento a 1; basta con sustituir donde se hace referencia a la operación C1, por la operación C2. La única diferencia es que existe una combinación que empieza por 1: la 100...0, que no es C2 de ninguna que empiece por 0. A ésta, se la identifica con un número negativo, siguiendo la secuencia lógica de números negativos asignados.

Ej. Código complemento a 2 de una longitud de palabra de 4 dígitos, de los cuales 2 son para la parte entera y 2 para la parte decimal:

00.00 → 0.0(10 10.00 → -2.0(10 00.01 → 0.25(10 10.01 → -1.75(10 00.10 → 0.5(10 10.10 → -1.5(10 00.11 → 0.75(10 10.11 → -1.25(10 01.00 → 1.0(10 11.00 → -1.0(10 01.01 → 1.25(10 11.01 → -0.75(10 01.10 → 1.5(10 11.10 → -0.5(10 01.11 → 1.75(10 11.11 → -0.25(10

Rango

Para una palabra de código con el formato genérico habitual: [ -2 p-1 , (2 p-1-1)+(1-2 -q) ] Precisión = 2 -q. Características generales de esta representación:

- El dígito más significativo sigue haciendo referencia al signo de la cantidad representada, en el mismo sentido que en los códigos complemento a 1.

- Al poder transformar la operación resta en una suma: A-B=A+(-B), tampoco se hace necesaria la existencia de un circuito para la resta.

Page 16: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 16

- Frente al código complemento a 1 presenta la ventaja de haber eliminado la duplicidad en la representación del 0; cada palabra de código representa a una cantidad diferente.

Advertencia. Sería conveniente repetir la anterior, pero ahora referido a la operación C2. 2.2.4 Exceso a N

Puesto que estamos tratando con números de precisión finita, las cantidades a representar siempre estarán dentro de un determinado intervalo [-N,M]. Si sumamos N a cada uno de esos valores, el intervalo de cantidades a representar se transforma en el [0,M+N]: el problema de la codificación pasa a ser una simple representación de números positivos. Este es el principio en el que se basa la representación exceso a N: la cantidad X se representa mediante la combinación binario natural correspondiente al número X+N. Resumiendo: +N Representación en binario natural

[-N,M] ←—→ [0,M+N] ←——————————————→ Combinación binaria

Ej. Queremos representar el -8, en un código exceso a 16, con una longitud de palabra de 5 dígitos binarios. Esta cantidad vendrá representada por la combinación binario natural correspondiente al número -8+16=8(10=01000(2. Luego, la identificación cantidad↔combinación binaria en el código referido será:

-8 → 01000 Y a la inversa: la combinación 1010 perteneciente a un código exceso a 8 representa a la cantidad X:

1010(2=10(10=X+exceso ⇒ X=10-exceso=10-8=2(10 En cada caso el valor de N vendrá fijado por el límite inferior del intervalo de representación.

Características generales:

- Sean X e Y a cantidades representadas por las combinaciones A y B respectivamente. Si X>Y entonces, interpretadas en binario natural, A>B. A diferencia de las representaciones complemento, se pueden usar los mismos circuitos comparadores que para el código binario natural.

- Por contra, la aritmética se complica con respecto a la de los códigos mencionados.

2.3 Representación de números reales en punto flotante

Recordemos que partimos de números puestos de la forma: ±m 2 e, y lo que se representa en la palabra de código es el signo, la mantisa y el exponente por separado. Cada uno de estos elementos presenta una serie de problemas característicos en su codificación:

- Signo. Tiene dos posibles valores: + y -. Es susceptible, por lo tanto, de ser representado por un único dígito binario. El problema que se presenta es de convenio: qué valor del dígito asignar a cada valor del signo.

- Mantisa. Es la representación de un número real positivo. El problema reside en que los valores que puede adoptar para una misma cantidad a representar, son múltiples. Utilizando un ejemplo en decimal podemos ver esto:

La representación exponencial del número 5385.3, tiene, entre otras, las siguientes formas:

5385.3=5.3853⋅103=53.853⋅102=53853⋅10 -1=538530⋅10 -2 ...

Page 17: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 17

Igual ocurre con números en binario:

La representación exponencial del número 1010.1, tiene, entre otras, las siguientes formas2: 1010.1=1.0101⋅23=10.101⋅22=10101⋅2 -1=101010⋅2-2 ...

Dada la imposibilidad de representar el punto decimal en binario, habrá que llegar a un

compromiso al fijar su posición dentro de los dígitos reservados para la mantisa en la palabra de código. Dicho de otra manera, la mantisa ha de tener una forma fija, que se denomina normalizada.

- Exponente. Son números enteros, por lo que lo único que hay que hacer es fijar el tipo de código usado en su representación.

Vemos, por lo tanto, que es imposible continuar el estudio de este tipo de representaciones de forma

general, sin concretar una serie de compromisos. Una de las normas más extendidas es la que veremos a continuación. 2.3.1 Normalización IEEE 754

Se trata de una norma de representación de número reales cuyo objetivo es facilitar e intercambio de datos numéricos no sólo entre programas de la misma máquina, si no también entre máquinas diferentes. Se pretende que todos los ordenadores unifiquen sus sistemas de representación de números reales. Esta normalización consta de un conjunto de normas que fueron elaboradas por expertos del Institute of Electric and Electronic Engineer (IEEE). Se agrupan en tres capítulos:

- Formato de los datos.

- Operaciones aritméticas.

2 Observar como multiplicar o dividir por dos en binario tiene las mismas propiedades que multiplicar o dividir por

10 en decimal.

- Tratamiento o decisiones a adoptar ante situaciones especiales como desbordamiento, redondeo, truncamiento o división por cero.

Aquí sólo vamos fijarnos en el primer aspecto. Los puntos generales de esta norma son:

1.- La base del exponente es dos. Se supone implícita y, por los tanto, no se representa.

2.- El orden en que aparecen las informaciones a representar en la palabra de código es: signo, exponente, mantisa.

3.- La relación valor del dígito de signo↔valor del signo es: 0→signo +, 1→signo -.

4.- La normalización de la mantisa es la siguiente: su primer dígito significativo ("1"), debe quedar justo a la izquierda del punto decimal. Este valor es implícito, de forma que sólo se representa lo

Page 18: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 18

que está a la derecha del punto. O sea, la mantisa ha de ponerse de la forma 1.m´, siendo m´ lo que es almacenado en la palabra de código.

5.- El exponente se representa en exceso a N=2p-1-1, donde p es el número de dígitos reservados en la representación para el exponente. Al valor almacenado se le denomina característica, es decir: característica=exponente+exceso (simbólicamente: c=e+N).

Existen dos valores de la característica que suponen dos casos especiales en el uso de la representación:

6.- Si la característica toma su valor máximo (11 ... 11), la palabra de código es interpretada de las siguientes dos formas, dependiendo del valor almacenado en el campo reservado para la mantisa (m´):

- Si m´=0, entonces, el número representado es el + infinito o - infinito, dependiendo de valor del dígito de signo.

- Si m ≠0, se utiliza para representar caracteres especiales.

7.- Si el exponente toma su valor mínimo (00 ... 00), existe una doble excepción:

- En la representación de la mantisa. Ésta es normalizada de la forma 0.m´. Lo que se almacena en la palabra de código sigue siendo m´.

- En la representación del exponente. El exceso que se aplica es N=2p-1-2.

8.- Existen dos formatos básicos de datos:

(I) Precisión simple

La longitud de la palabra de código es de 32 dígitos binarios, repartidos de la siguiente manera:

ns (número de dígitos para representar el signo) = 1 dígito binario. nc (número de dígitos para representar la característica) = 8 dígitos binarios. nm (número de dígitos para representar la mantisa) = 23 dígitos binarios.

Dada la longitud del campo reservado para la característica, es inmediato deducir que el exceso normal

será: N=27-1=127.

Si identificamos como M al valor representado, como s al valor del dígito de signo, como c al valor de la característica y como m´ al valor del campo reservado para la mantisa en la palabra de código, la interpretación de un cierto valor almacenado será:

- Si c=255 y m≠0 → M es un carácter especial. - Si c=255 y m´=0 → M = (-1) s * infinito - Si 0<c<255 → M = (-1) s * 1.m´ * 2 c-127 - Si c=0 y m≠0 → M = (-1) s * 0.m´ * 2 -126 - Si c=0 y m´=0 → M = 0

Page 19: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 19

(II) Precisión doble

La longitud de la palabra de código es de 64 dígitos binarios, repartidos de la siguiente manera:

ns = 1 dígito binario. nc = 11 dígitos binarios. nm = 52 dígitos binarios.

Dada la longitud del campo reservado para la característica, es inmediato deducir que el exceso normal

será: N=2 10-1=1023.

Identificando cada valor representado de la forma indicada anteriormente, la interpretación de un valor almacenado será:

- Si c=2047 m≠0 → M es un carácter especial. - Si c=2047 m´=0 → M = (-1) s * infinito - Si cc<c<2047 → M = (-1) s * 1.m´ * 2 c-1023 - Si c=0 y m≠0 → M = (-1) s * 0.m´ * 2 -1022 - Si c=0 y m´=0 → M = 0

Ej. . Interpretar la combinación 0 00101000 001010... como una representación en punto flotante IEEE de

precisión simple: c=00101000(2=40(10=e+N ⇒ e=40-127=-87 0 (valor mínimo) <c<255 (valor máximo) ⇒ mantisa de la forma 1.m´ con m´=001010... s=0 ⇒ signo positivo.

Luego M=1.001010.. ⋅ 2 -87

. Idem, pero ahora la combinación es 0 00000000 010111001... c=0(2=0(10 ⇒ caso especial característica mínima ⇒ e=-126 como c=0 ⇒ mantisa de la forma 0.m´ con m´=010111001... s=0 ⇒ signo positivo.

Luego M=0.010111001.. ⋅ 2 -126

.Idem: 1 11111111 00000 ... 0 c=11111111(2=255(10 ⇒ caso especial característica máxima m´= 0 s=1 ⇒ signo negativo.

Luego M= -∝ 2.4 Representación de cantidades exactas. Códigos BCD

Estos códigos se basan en codificar por separado cada dígito decimal del número a representar. El alfabeto fuente será: S=0, 1, 2, 3, 4, 5, 6, 7, 8, 9. El número n de dígitos de la palabra de código será:

(2n ≤ 10 )n min ⇒ n = 4

Estos códigos se pueden clasificar en ponderados y no ponderados.

Page 20: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 20 BCD ponderados

Cada posición lleva asociada un peso. La cifra decimal se representa mediante los coeficientes de un polinomio generador, de forma similar a lo indicado en los sistemas de numeración:

p a = N ii

3

=0i∑ pi = peso asociado a la posición i.

ai = coeficiente i. Valor del dígito i de la palabra de código.

Algunos ejemplos de este tipo de códigos BCD se pueden observar en la Tabla 3.

El código BCD Aiken expuesto, aparte de ser ponderado, posee la propiedad adicional de ser

autocomplementario. Esto significa que si A y B son las palabras de código correspondientes a los dígitos decimales X e Y respectivamente, entonces si C9(X)=Y, se cumple que C1(A)=B. BCD no ponderados.

La asignación palabra de código↔dígito decimal es totalmente arbitraria. Un caso característico de este tipo es el BCD exceso a tres (Tabla 4), que también posee la propiedad de ser autocomplementario. Cada dígito decimal se representa por la combinación binario natural correspondiente al resultado de sumar tres al valor de ese dígito. 2.4.1 Cambios de representación a) Decimal →→→→ BCD

Se sustituye cada dígito decimal por su correspondiente codificación en el código BCD que estemos usando.

Ej. El número 356.34 en BCD natural quedará: 0011 0101 0110 . 0011 0100

BCD natural

BCD Aiken

p3 p2 p1 p0 p3 p2 p1 p0 p3 p2 p1 p0 Dígito decimal 8 4 2 1 2 4 2 1 5 4 2 1

0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 2 0 0 1 0 0 0 1 0 0 0 1 0 3 0 0 1 1 0 0 1 1 0 0 1 1 4 0 1 0 0 0 1 0 0 0 1 0 0 5 0 1 0 1 1 0 1 1 1 0 0 0 6 0 1 1 0 1 1 0 0 1 0 0 1 7 0 1 1 1 1 1 0 1 1 0 1 0 8 1 0 0 0 1 1 1 0 1 0 1 1 9 1 0 0 1 1 1 1 1 1 1 0 0

Tabla 3

Dígito decimal

Código BCD exceso tres

0 0 0 1 1 1 0 1 0 0 2 0 1 0 1 3 0 1 1 0 4 0 1 1 1 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

Tabla 4

Page 21: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 21 b) BCD →→→→ decimal

Se agrupan los dígitos de cuatro en cuatro del punto hacia la izquierda y derecha. Cada conjunto se sustituye por el dígito decimal al que codifican, según el código BCD usado.

Ej. Supongamos que estamos usando el código BCD exceso a tres. La combinación: 0100 1100 1000 . 0011 0101

representará la cantidad 195.02 3 CÓDIGOS ALFANUMÉRICOS

Recordemos que son aquellos en los que el alfabeto fuente es un conjunto de caracteres (letras, signos de puntuación, guarismos, carácteres de control para el Terminal, ...). El problema ahora consiste en crear una tabla que haga corresponder a cada símbolo del alfabeto fuente, con una combinación de símbolos del alfabeto código (como siempre se supondrá el binario).

El código alfanumérico más utilizado es el denominado ASCII (American Standard Code for

Information Interchange). Este código en su versión original representa 127 caracteres de la forma expuesta en la Tabla 5. En ella podemos distinguir dos grupos de caracteres. Uno de ellos está formado por los 32 primeros denominados de "control". Son caracteres no imprimibles cuyo significado es el siguiente:

MSB→ LSB↓

000

001

010

011

100

101

110

111 0000

NUL 0

DLE 16

SP 32

0 48

@ 64

P 80

` 96

p 112

0001 SOH 1

DC1 17

! 33

1 49

A 65

Q 81

a 97

q 113

0010 STX 2

DC2 18

" 34

2 50

B 66

R 82

b 98

r 114

0011 ETX 3

DC3 19

# 35

3 51

C 67

S 83

c 99

s 115

0100 EOT 4

DC4 20

$ 36

4 52

D 68

T 84

d 100

t 116

0101 ENQ 5

NAK 21

% 37

5 53

E 69

U 85

e 101

u 117

0110 ACK 6

SYN 22

& 38

6 54

F 70

V 86

f 102

v 118

0111 BEL 7

ETB 23

' 39

7 55

G 71

W 87

g 103

w 119

1000 BS 8

CAN 24

( 40

8 56

H 72

X 88

h 104

x 120

1001 HT 9

EM 25

) 41

9 57

I 73

Y 89

i 105

y 121

1010 LF 10

SUB 26

* 42

: 58

J 74

Z 90

j 106

z 122

1011 VT 11

ESC 27

+ 43

; 59

K 75

[ 91

k 107

123

1100 FF 12

FS 28

' 44

< 60

L 76

\ 92

l 108

| 124

1101 CR 13

GS 29

- 45

= 61

M 77

] 93

m 109

125

1110 SO 14

RS 30

. 46

> 62

N 78

^ 94

n 110

~ 126

1111 SI 15

US 31

/ 47

? 63

O 79

_ 95

o 111

DEL127

Tabla 5

Page 22: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 22

El otro grupo lo constituyen los restantes caracteres, conocidos habitualmente como "imprimibles".

Observando la Tabla 5, se puede ver que tanto los dígitos decimales como las letras se encuentran ordenados de forma creciente. Esto garantiza que los algoritmos de ordenación de los números en binario natural, también sean válidos para la ordenación de cadenas de caracteres.

El código anterior está creado para el juego de carateres ingleses más corrientes, no contempla ni caracteres especiales (como pueden ser algunos gráficos), ni los específicos de otras lenguas. Para solucionar esto, el código ASCII original de 7 dígitos se extendió a 8 dígitos. Los 128 primeros caracteres de éste son los mismos que los del de 7 dígitos, el problema surge en los 128 nuevos símbolos añadidos, ya que desgraciadamente no existe un convenio al respecto. La asignación más habitual, usada para el idioma castellano por los ordenadores IBM PC, es la que aparece en la Tabla 6. 4 Distancia de Hamming y distancia de un código

Definición 1: Se define distancia de Hamming entre dos combinaciones de n dígitos binarios, como el número de ellos que hay que alterar para pasar de la una a la otra.

Ej. La distancia de Hamming entre las combinaciones binarias 0010 y 0111 es de 2 (d(0010,0111)=2),

ya que hay dos posiciones (la a0 y la a2 ) cuyos valores son diferentes en ambas combinaciones.

NUL: Nulo (Null). DLE: Escape del enlace de datos (Data Link Escape).

SOH: Inicio de cabecera (Start Of Header).

DC1: Control del dispositivo 1 (Device Control 1).

STX: Inicio de texto (Start of TeXt). DC2: Control del dispositivo 2 (Device Control 2).

ETX: Final de texto (End of TeXt). DC3: Control del dispositivo 3 (Device Control 3).

EOT: Final de transmisión (End Of Transmission).

DC4: Control del dispositivo 4 (Device Control 4).

ENQ: Petición, consulta (Enquire). NAK: Acuse de recibo negativo (Not AcKnoledge).

ACK: Acuse de recibo (ACKnowledge). SYN: Sincronización (SYNchronize). BEL: Pitido (Bell). ETB: Final de bloque de transmisión (End of

Trans. Block). BS: Retroceso de un espacio (Back

Space). CAN: Anulación (CANcel).

HT: Tabulación horizontal (Horizontal Tab.).

EM: Fin de soporte (End of Material).

LF: Salto de línea (Line Feed). SUB: Substituir (SUBstitute). VT: Tabulación vertical (Vertical Tab.). ESC: Escape (ESCape). FF: Salto de página (Form Feed). FS: Separador de archivo (File Separation). CR: Retorno de carro (Cariage Return). GS: Separador de grupo (Group Separation). SO: Fuera de código (System Out). RS: Separador de registro (Register Separation). SI: Dentro de código (System In). US: Separador de sub-registro (Underground

Separation). DEL: Borrar, suprimir (DELete).

Page 23: Fundamentos de la Informática Algunos códigos usados ...cevp/FI_I/fichs_pdf_teo/FI_I_Tema6... · Fundamentos de la Informática Algunos códigos usados habitualmente en informática

Fundamentos de la Informática Algunos códigos usados habitualmente en informática 23

El nombre de distancia proviene de que esta operación puede contemplarse como una aplicación

d: Bn×Bn → N (B=alfabeto binario), que verifica las propiedades del concepto matemático de métrica:

a) ∀ x, y ∈ Bn / d (x, y) = 0 ⇔ x = y b) ∀ x, y ∈ Bn / d (x, y) = d (y, x) c) ∀ x, y, z ∈ Bn / d (x, z) ≤ d (x, y) + d (y, z) (Desigualdad triangular)

Las dos primeras propiedades se derivan de la propia definición. Sin embargo, para demostrar la tercera

basta tener en cuenta que:

Definición 2: se define distancia mínima de un código como la distancia (de Hamming) más pequeña

entre dos combinaciones cualesquiera (no necesariamente consecutivas) del código.

Ej. Todos los códigos vistos en este tema tienen una distancia mínima de 1.

Es necesario fijar estos conceptos, porque, como se verá en lecciones posteriores, sirven para introducir y, a veces, caracterizar propiedades importantes de los códigos.

MSB→ LSB↓

1000

1001

1010

1011

1100

1101

1110

1111 0000

Ç 128

É 144

á 160

176

192

208

α 224

≡ 240

0001 ü 129

æ 145

í 161

177

193

209

ß 225

± 241

0010 é 130

Æ 146

ó 162

178

194

210

Γ 226

≥ 242

0011 â 131

ô 147

ú 163

179

195

211

π 227

≤ 243

0100 ä 132

ö 148

ñ 164

180

196

212

Σ 228

⌠ 244

0101 à 133

ò 149

Ñ 165

181

197

213

σ 229

⌡ 245

0110 å 134

û 150

ª 166

182

198

214

µ 230

÷ 246

0111 ç 135

ù 151

º 167

183

199

215

τ 231

≈ 247

1000 ê 136

_ 152

¿ 168

184

200

216

Φ 232

° 248

1001 ë 137

Ö 153

_ 169

185

201

217

Θ 233

⋅ 249

1010 è 138

Ü 154

¬ 170

186

202

218

Ω 234

⋅ 250

1011 ï 139

¢ 155

½ 171

188

203

219

δ 235

√ 251

1100 î 140

£ 156

¼ 172

189

204

220

∞ 236

_ 252

1101 ì 141

¥ 157

¡ 173

190

205

221

φ 237

² 253

1110 Ä 142

_ 158

« 174

191

206

222

ε 238

254

1111 Å 143

ƒ 159

» 175

192

207

223

∩ 239

SP 255

Tabla 6

z) d(y,+y) d(x,|=z-y|+|y-x||z-x|=z)d(x, ByRB Como

|z-x|=z)d(x,),z ,z ...., ,z ,z(=z ),x ,x...., ,x ,x(=x si

ii

1-n

=0iii

1-n

=0iii

1-n

=0i

nnn

ii

1-n

=0i012-n1-n012-n1-n

∑∑∑

≤∈∀⊂ __

_