Algunos códigos usados habitualmente en informática

Fundamentos de la Informática 6 1 Algunos códigos usados habitualmente en informática 1 Algunos códigos usados habitualmente en informática CONCEP
Author:  Héctor Sáez Gil

0 downloads 30 Views 162KB Size

Recommend Stories


Protocolos usados en Internet
Ethernet. {IP}. {ICMP}. {TCP}. {HTTP}

Actividad 2.2 Cómo son habitualmente las presentaciones?
CUDI CAMPUS VIRTUAL Actividad 2.2 ¿Cómo son habitualmente las presentaciones? ¿Qué entendemos por una presentación? Contestamos antes a una pregunta

MANEJO DE LOS ACEITES USADOS
MANEJO DE LOS ACEITES USADOS 1 MANEJO DE LOS ACEITES USADOS El pobre manejo de los aceites usados en el sector industrial y los derivados del func

7. ACEITES INDUSTRIALES USADOS...1
ÍNDICE 7. ACEITES INDUSTRIALES USADOS.............................................................................1 7.1. ANÁLISIS Y DIAGNÓSTICO DE L

ALGUNOS PROYECTOS COMUNITARIOS EN EJECUCIÓN
UNIVERSIDAD CENTROCCIDENTAL” LISANDRO ALVARADO” VICERRECTORADO ACADEMICO COORDINACION CENTRAL SERVICIO COMUNITARIO ESTUDIANTE BARQUISIMETO – ESTADO LA

Story Transcript

Fundamentos de la Informática

6 1

Algunos códigos usados habitualmente en informática 1

Algunos códigos usados habitualmente en informática

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 be

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

N = ∑ ai bi = a p-1 b p -1 + a p- 2 b p- 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 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.

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

N = ∑ a i 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

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: 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: {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 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 16 i i=-q

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

Dígito hexadecimal

Combinación binaria

Dígito hexadecimal

Combinación binaria

0 1 2 3 4 5 6 7

0000 0001 0010 0011 0100 0101 0110 0111

8 9 A(10(10) B(11(10) C(12(10) D(13(10) E(14(10) F(15(10)

1000 1001 1010 1011 1100 1101 1110 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 1.385 - 2 0 ( 1) = 0.385 0.385 - 2-2 (0.250) = 0.135 0.135 - 2-3 (0.125) = 0.01 0.01 - 2-7 ( ... ) = 0.0021875

26 25 24 23 22 21 20 2-12-22-3 . . . 2-7 125.385(10=1 1 1 1 1 0 1 . 0 1 1 0 0 0 1(2

( 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

Fundamentos de la Informática 125 : 21 (a0 ) 1 62 : 2 (a1 ) 0 31 : 2 (a2 ) 1 15 : 2 (a3 ) 1 7 : 2 (a4 ) 1 3 : 2 (a5 ) 1 1 : 2 (a6 ) 1 0

Algunos códigos usados habitualmente en informática 10

125(10 = 1111101(2

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

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 1 23 : 8 7 2:8 2 0

0.1875 ⋅ 8 = 1.5 → 1 0.5 ⋅ 8 = 4.0 → 4

185(10 = 271(8

0.1875(10 ≈ 0.14(8

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: 129 : 16 1 8 : 16 8 0

Parte decimal:

129(10 = 81(16

0.0535 ⋅ 16 = 0.856 → 0 0.856 ⋅ 16 = 13.696 → D 0.696 ⋅ 16 = 11.136 → B

0.0535(10 ≈ 0.0DB(16

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)a p-1 ∑ ai 2i i=-q

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

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) nc (número de dígitos para representar la característica) nm´(número de dígitos para representar la mantisa)

= 1 dígito binario. = 8 dígitos binarios. = 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 - Si c=255 y m´=0 - Si 0

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.