Vous êtes sur la page 1sur 23

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

Informática

Algunos códigos
6 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.
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.
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:

±mbe 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.
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:
n
(M ≤ 2 )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.


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

p-1

N =  ai bi = ap-1 bp-1 + ap-2 bp-2 + ...+ a1 b1 + a0 b0 + a-1 b-1 + ...+ a-q b-q
i=-q

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 b 2 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 a i. 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.
 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:

p-1

N =  ai 10i
i=-q

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: {a i}={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.

p-1

N =  ai 2i
i=-q

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
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:
p-1

N =  0  2i = 0
i=-q

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

N =  1  2i = ( 2 p - 1 )+( 1 - 2-q )
i=-q

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: {a i}={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

p-1

N =  ai 8i
i=-q

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.
p-1

N =  ai
16i i=-q
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.
Combinación Combinación
Dígito hexadecimal binaria Dígito hexadecimal 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

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
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
...
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.

1
La notación utilizada es: dividendo : divisor
resto cociente
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:

p-2
N = a p-1 a p-2 ... a1 a0 . a -1 a -2 ... a-q = (-1)ap-1  ai 2i
i=-q
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
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) ]


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.
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 C b-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 C 2 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.
- 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 C 2.

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 ...
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.

- 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

2 Observar como multiplicar o dividir por dos en binario tiene las mismas propiedades que multiplicar o dividir
por 10 en decimal.
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
(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.


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:
3

N =  ai pi = peso asociado a la posición i.

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


i=0

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

BCD natural BC D Aiken


p3 p2 p1 p0 p3 p p1 p0 p3 p2 p1 p0
Dígito decimal 2
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

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.
Dígito decimal Código BCD exceso
La asignación palabra de códigodígito tres
decimal es totalmente arbitraria. Un caso 0 0011
característico de este tipo es el BCD exceso a 1 0100
tres (Tabla 4), que también posee la propiedad 2 0101
de ser autocomplementario. Cada dígito 3 0110
decimal se representa por la combinación 4 0111
binario natural correspondiente al resultado de 5 1000
sumar tres al valor de ese dígito. 6 1001
7 1010
8 1011
2.4.1 Cambios de representación
9
Tabla 4 1100
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
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).

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

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:
NUL: Nulo (Null). DLE: Escape del enlace de datos (Data
Link Escape).
SOH: Inicio de cabecera (Start DC1: Control del dispositivo 1 (Device Control
Of Header). 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 DC4: Control del dispositivo 4 (Device Control
Transmission). 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 CAN: Anulación (CANcel).
Space).
HT: Tabulación horizontal EM: Fin de soporte (End of Material).
(Horizontal Tab.).
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).

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.
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

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:

n-1


si x = ( xn-1 , xn-2 , ...., x1 , x0 ), z = ( zn-1 , zn-2 , ...., z1 , z0 ),_d(x, z)=
i=0
| xi - z i |
n-1 n-1 n-1
Como Bn  Rn _y  Bn _d(x, z)= | xi - zi | | xi - y |+| y - zi |= d(x, y)+ d(y, z)
i i
i=0 i=0 i=0

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.

Vous aimerez peut-être aussi