fundamentos de la informática algunos códigos …cevp/fi_i/fichs_pdf_teo/fi_i_tema6_algcod.pdf ·...
Post on 19-Sep-2018
221 Views
Preview:
TRANSCRIPT
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.
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.
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.
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.
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∑
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∑
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∑
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.
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
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.
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 ∑
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
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) ]
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.
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.
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 ...
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
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
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.
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
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
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).
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
∑∑∑
∑
≤∈∀⊂ __
_
top related