Tema02 Notas

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 58

ESTRUCTURA DE COMPUTADORES

Tema 2: Representación de la información en los computadores

GRADO EN INGENIERÍA INFORMÁTICA


GRADO EN INGENIERÍA DE COMPUTADORES

Luis Rincón

1
Índice

1. Introducción.
2. Sistemas de representación numérica.
3. Aritmética binaria.
4. Sistemas de representación en coma fija.
5. Sistemas de representación en coma flotante.
6. Representación de caracteres alfanuméricos.
7. Representación de datos numéricos: texto frente a binario.

Los computadores procesan información, y en este tema vamos a estudiar los sistemas de
representación más utilizados en los computadores para representar información numérica y
alfanumérica.
Comenzaremos con una breve introducción, para después presentar los fundamentos básicos de la
representación numérica en diferentes bases de numeración, haciendo más hincapié en el sistema
binario y en las operaciones aritméticas realizadas en base 2.
Visto todo esto, pasaremos a estudiar los sistemas utilizados para representar datos numéricos
enteros (coma fija), y continuaremos analizando la representación en coma flotante, que dota al
computador de la posibilidad de manejar aproximaciones a los números reales.
Finalmente, presentaremos brevemente los códigos utilizados para representar información
alfanumérica, indicando además cómo se representan los strings, que son tiras o cadenas formadas
por una secuencia de caracteres.

2
Bibliografía

[PAT] D.A. PATTERSON, J.L. HENNESSY. Computer Organization and Design, 5th
ed. Morgan Kaufmann, 2014 (o la traducción española más reciente: Estructura y
Diseño de Computadores, 4ª ed. Reverté, 2011).

[PRI] A. PRIETO, A. LLORIS, J.C. TORRES. Introducción a la Informática. 4ª


edición, McGraw-Hill, 2006.

[CER] C. CERRADA, V. FELIU. Estructura y Tecnología de Computadores I. U.N.E.D.,


1993.

[DMI] P. DE MIGUEL. Fundamentos de los Computadores. 9ª edición. Paraninfo,


2006.

[STA] W. STALLINGS. Organización y Arquitectura de Computadores. 7ª edición,


Prentice Hall, 2006.

Se recomienda leer los capítulos de [CER]:


• Capítulo 5: dedicado a la representación de cantidades numéricas.
• Capítulo 6: ceñirse a la representación de datos alfanuméricos.
Como alternativas están el capítulo 3 de [PRI], o el capítulo 2 de [DMI].
[STA] trata la representación numérica en los capítulos 9 y 10 en el contexto de la aritmética en los
computadores.
Muchos textos que tratan sobre sistemas digitales incorporan un capítulo destinado a la
representación de la información. Sin embargo, no suelen cubrir ni la coma flotante ni la
representación de datos alfanuméricos. Los tres citados anteriormente sí tratan estas cuestiones en
detalle.

3
Índice

1. Introducción.
2. Sistemas de representación numérica.
3. Aritmética binaria.
4. Sistemas de representación en coma fija.
5. Sistemas de representación en coma flotante.
6. Representación de caracteres alfanuméricos.
7. Representación de datos numéricos: texto frente a binario.

4
Introducción
Codificación de la información digital

• Bit (binary digit): unidad mínima de información. Dos valores: 0 y 1.


• Información: grupos o secuencias de bits.
 Palabra: tamaño de referencia del computador.
 Octeto, carácter o byte: 8 bits.
• Codificación: establece las reglas que definen la correspondencia
entre cada elemento de información y la secuencia de bits que
constituye su código.
 Codificación directa.
 Codificación por campos.
 Codificación por secuencias de códigos.

Los computadores manejan información binaria. Como un único bit tiene poca potencia expresiva, los
conceptos se expresan mediante grupos o secuencias de bits. El tamaño privilegiado en el
computador es la palabra, cuyo ancho depende del procesador concreto. Otro tamaño habitual es el
octeto, carácter o byte, que expresa el número de bits que se suelen usar para representar un
carácter.
Los sistemas de codificación establecen las reglas que definen la correspondencia entre cada
elemento de información y la secuencia de bits que constituye su código. Existen diferentes tipos de
sistemas de codificación: sistemas de codificación directa, por campos o por secuencias de códigos.
En los sistemas de codificación directa se establece una correspondencia biunívoca entre un
conjunto de símbolos y un conjunto de códigos binarios, de forma que con n dígitos binarios se
pueden representar 2n códigos binarios distintos, y, por ende, 2n conceptos diferentes. En general,
puede afirmarse que para representar d símbolos serán precisos n dígitos binarios, cumpliéndose que
d  2n, y por tanto n  log2d .
Los sistemas de codificación por campos otorgan significados específicos a parte de la información
codificada. Esto sucede en la codificación de instrucciones, o en ciertos sistemas de representación
numérica, como los sistemas de representación con signo o en coma flotante.
En los sistemas de codificación por secuencias de códigos también se otorga significado específico
a partes de la información codificada, pero sucede que existen símbolos que están codificados
mediante secuencias de diferentes longitudes. Un ejemplo de estos sistemas lo constituyen los
códigos de Hamming, o los repertorios de instrucciones de longitud variable.

5
Índice

1. Introducción.
2. Sistemas de representación numérica.
3. Aritmética binaria.
4. Sistemas de representación en coma fija.
5. Sistemas de representación en coma flotante.
6. Representación de caracteres alfanuméricos.
7. Representación de datos numéricos: texto frente a binario.

6
Sistemas de representación numérica
Bases de representación

• Sistemas de representación numérica: constan de


 Dígitos o cifras.
 Reglas para operar (sumas, restas, etc).
• Base (b) de un sistema de numeración: número de dígitos del sistema
utilizado.
• Bases más utilizadas:
 Binaria (base 2) → {0,1}
 Hexadecimal (base 16) → {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}
 Octal (base 8) → {0, 1, 2, 3, 4, 5, 6, 7}
 Decimal (base 10) → {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}: para los humanos.
• Los sistemas de numeración son posicionales.

Los sistemas de representación numérica constan de:


• Un conjunto ordenado de símbolos (dígitos o cifras).
• Un conjunto de reglas bien definidas para las operaciones aritméticas de suma, resta,
multiplicación, división, etc.
Los sistemas de numeración utilizan una cierta base (radix), que especifica el número de dígitos o
cardinal de dicho conjunto ordenado. Las bases más utilizadas son las siguientes:
• Binaria (base 2): tiene dos dígitos diferentes {0,1}.
• Hexadecimal (base 16): tiene dieciséis dígitos diferentes {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C,
D, E, F}.
• Octal (base 8): tiene 8 dígitos diferentes {0, 1, 2, 3, 4, 5, 6, 7}.
• Decimal (base 10): tiene diez dígitos diferentes {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Es la utilizada
por las personas, dado que tenemos diez dedos.
Los sistemas de numeración son posicionales, lo que significa que el valor de un dígito no es
siempre el mismo, sino que depende de la posición que ocupa dentro de la secuencia de dígitos
utilizados en la representación de la cantidad. Cada posición i tiene un peso asignado que viene dado
por bi, siendo b la base utilizada. Se cumple que el valor de un dígito di se obtiene mediante el
producto de su valor intrínseco por el peso asignado a la posición que ocupa. Entonces, el valor del
dígito vendrá dado por el producto di·bi .
En las diapositivas siguientes veremos cómo transformar la representación de una cierta cantidad X
en diferentes bases.

7
Sistemas de representación numérica
Ejemplo: conversión decimal → binario: 19,3

Parte entera: (19)10 Parte fraccionaria: (0,3)10


0,3  2
19 2 a-1 0 0,6  2
a0 1 9 2 a-2 1 0,2  2
a1 1 4 2 a-3 0 0,4  2
a2 0 2 2 a-4 0 0,8  2
a3 0 1 a4 a-5 1 0,6  2
a-6 1 0,2  2
(19)10 = (10011)2=(16+2+1) 10 a-7 0 0,4  2
a-8 0 0,8  2
a-9 1 0,6  2
Resultado final:
... ...
19,310 =
(0,3)10 = (0,010011001...)2
10011,010011001…2

Para convertir un dato de decimal a binario, se trabaja separadamente con la parte entera y con la
parte fraccionaria.

Para la parte entera, se divide el dato original entre 2, y reservamos el resto. Después se divide el
cociente obtenido entre 2, y volvemos a reservar el resto. Se realizan divisiones sucesivas de los
cocientes entre 2, reservando todos los restos, hasta que obtenemos un cociente menor de 2. La
parte entera convertida a decimal se compone del último cociente y de todos los restos obtenidos,
leídos de abajo hacia arriba.

Para la parte fraccionaria, se realiza el producto de la misma por 2, y del resultado reservamos la
parte entera. Tomamos la parte fraccionaria del producto anterior y la volvemos a multiplicar por 2, y
volvemos a reservar la parte entera del resultado. Procedemos del mismo modo repetidas veces hasta
que el resultado del producto nos dé un número entero (ya que los siguientes productos serían todos
nulos), o hasta que hemos llegado al ancho máximo permitido. La conversión de la parte fraccionaria
será 0’a-1a-2a-3…, donde todos los a-i son las partes enteras de los productos realizados, leídos de
arriba hacia abajo.

Si en la conversión de la parte fraccionaria el último producto no resultó nulo, se comete un error en


la representación, igual a la parte fraccionaria del resultado multiplicada por 2k, siendo k el peso del
último dígito calculado.

Para realizar conversiones de base 10 a cualquier otra base b procederemos de igual modo, pero
dividiendo o multiplicando por la base b en vez de por 2.

8
Sistemas de representación numérica
Ejemplo: conversión binario → decimal: 10011,0100110012

p -1
N a
iq
i  bi

N = 1ꞏ24 + 0ꞏ23 + 0ꞏ22 + 1ꞏ21 + 1ꞏ20 + 0ꞏ2-1 +


1ꞏ2-2 + 0ꞏ2-2 + 0ꞏ2-3 + 0ꞏ2-4 + 1ꞏ2-5 + 1ꞏ2-6 + 0ꞏ2-7
+ 0ꞏ2-8 + 1ꞏ2-9 = 19,29882812510  19,310

Para convertir un dato binario a su representación decimal, no tenemos más que calcular la suma de
los productos de cada dígito por su peso. Para convertir a base 10 desde cualquier otra base,
procederemos de igual modo, si bien el peso asignado a cada dígito dependerá de la base utilizada,
que ya no será 2.

9
Sistemas de representación numérica
Equivalencia entre decimal, binario, octal y hexadecimal

Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Binario 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000

Octal 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20

Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F 10

En esta diapositiva se muestra la comparación entre las primeras combinaciones de las bases más
habitualmente utilizadas: base 10, base 2, base 8 y base 16.

Existe un método sencillo para convertir datos de una base b1 a otra b2 si se cumple que b2=b1p :
cada p dígitos de la representación de b1 dan un único dígito de la representación en b2. Este método
puede usarse a la hora de convertir un número de decimal a binario con un elevado número de cifras.

Por ejemplo, el número X=23,1 tiene una parte fraccionaria que es periódica en binario. Por tanto, si
queremos transformarlo a binario cometiendo un error pequeño, tendríamos que obtener muchas
cifras para la parte fraccionaria. Supongamos que queremos sacar 24 cifras en la parte fraccionaria.
Entonces tendríamos que hacer 24 productos, lo cual es muy pesado. Obtendríamos el mismo
resultado si la parte fraccionaria la pasásemos a hexadecimal obteniendo 6 cifras (sólo 6 productos) y
utilizásemos la tabla de equivalencia para transformarla a binario (cuatro bits por cada dígito
hexadecimal).

10
Índice

1. Introducción.
2. Sistemas de representación numérica.
3. Aritmética binaria.
4. Sistemas de representación en coma fija.
5. Sistemas de representación en coma flotante.
6. Representación de caracteres alfanuméricos.
7. Representación de datos numéricos: texto frente a binario.

11
Aritmética binaria
Suma y resta

• Las operaciones aritméticas de suma y resta en binario se realizan según


tablas más sencillas que las equivalentes en el sistema decimal.
Suma binaria Resta binaria
A RESTA A
SUMA acarreo BINARIA 0 1
BINARIA
(+)
0 1 (-)

0 0 1
0 0 1 B
B
1 11 0
1 1 10
acarreo
1 acarreos 1 1 1 83 1 0 1 0 0 1 1 minuendo
9 1 0 0 1
15 + 1 1 1 1 - 21 - 1 0 1 0 1 sustraendo
+ acarreos 1 1 1 1
24 1 1 0 0 0 62 0 1 1 1 1 1 0 diferencia

Las operaciones de suma y resta en binario son muy sencillas, dado que hay muy pocas opciones que
contemplar.
Al sumar una pareja de dígitos se puede obtener un acarreo o llevada. Esto sucede cuando ambos
dígitos son 1. Ese acarreo se sumará a la pareja de dígitos que se encuentran inmediatamente a la
izquierda de la pareja que los generó.
Al restar una pareja de dígitos se puede producir un acarreo negativo o préstamo. Este acarreo se
restará a la pareja de dígitos que se encuentran inmediatamente a la izquierda de la pareja que los
generó.
Cuando la pareja de dígitos más significativos genera un acarreo, a éste se le llama acarreo de
orden superior.
Si se genera un acarreo de orden superior en una resta, significa que el sustraendo es mayor que el
minuendo.

12
Aritmética binaria
Producto

PRODUCTO A 12 1 1 0 0 multiplicando
BINARIO 0 1
() × 6 × 1 1 0 multiplicador
0 0 0 72 0 0 0 0
B
1 0 1 1 1 0 0 productos
parciales
1 1 0 0
1 0 0 1 0 0 0 resultado
M 64 + 8 = 72
× m
R M3 M2 M1 M0 multiplicando
× m2 m1 m0 multiplicador
M3ꞏm0 M2 ꞏm0 M1 ꞏm0 M0 ꞏm0
productos
M3ꞏm1 M2 ꞏm1 M1 ꞏm1 M0 ꞏm1 parciales
M3ꞏm2 M2 ꞏm2 M1 ꞏm2 M0 ꞏm2
R6 R5 R4 R3 R2 R1 R0 resultado

El producto de dos dígitos binarios es muy sencillo. La única complicación de la multiplicación es la


suma de los productos parciales.
Se observa que el número de dígitos del resultado de un producto es igual a la suma de los dígitos del
multiplicando más los del multiplicador.

13
Aritmética binaria
División

• Cálculo de los dígitos del cociente:


– Si dividendo parcial ≥ divisor → el siguiente dígito del cociente es 1.
– Si dividendo parcial < divisor → el siguiente dígito del cociente es 0.

112 8 dividendo 1 1 1 0 0 0 0 1 0 0 0 divisor

0 14 - 1 0 0 0 1 1 1 0 cociente

0 1 1 0 0
- 1 0 0 0
restos parciales 0 1 0 0 0
- 1 0 0 0
0 0 0 0 0
- 0 0 0 0
0 0 0 0 resto final

La única dificultad de la división está en realizar las restas para obtener los restos parciales y final. La
obtención de cada uno de los dígitos de cociente es muy simple.

14
Índice

1. Introducción.
2. Sistemas de representación numérica.
3. Aritmética binaria.
4. Sistemas de representación en coma fija.
5. Sistemas de representación en coma flotante.
6. Representación de caracteres alfanuméricos.
7. Representación de datos numéricos: texto frente a binario.

Vamos a estudiar los sistemas de representación más comunes en los computadores, comenzando
con los sistemas en coma fija, utilizados para representar números enteros con o sin signo.
La precisión de un sistema de representación es el número de bits utilizado para representar los
datos numéricos. El hardware de los computadores no trabaja con datos de ancho arbitrario, sino que
es capaz de trabajar únicamente con una o varias precisiones determinadas.
El rango de un sistema de representación es el conjunto de cantidades que es capaz de representar.
El rango está directamente relacionado con la anchura de los datos representados (n bits).
Como el rango es limitado, al operar con dos datos se puede obtener un resultado que esté fuera del
mismo. En este caso diremos que se ha producido desbordamiento (overflow) en la operación.
Cuando hay varios anchos de representación se puede realizar la operación de extensión de signo,
que consiste en pasar una cantidad representada con n bits a representarla con m bits, siendo m>n.
La resolución de un sistema de representación es la diferencia entre dos cantidades consecutivas
representables en el sistema. En sistemas de coma fija, la resolución es fija a lo largo de todo el
rango de cantidades representables, y es igual al peso del dígito menos significativo. Si se usan p bits
para la parte entera y q bits para la fraccionaria (p+q=n), la resolución será 2-q. Si q=0, entonces
los n bits se utilizarán para representar números enteros, y la resolución será 1, con lo que no se
cometerán errores en las operaciones realizadas, a no ser que se produzca desbordamiento.
Estudiaremos los siguientes sistemas de representación numérica en coma fija:
• Números sin signo: binario puro o binario natural.
• Números con signo:
 Módulo y signo o signo-magnitud.
 Complemento a 1.
 Complemento a 2.
 Exceso a M (representación con sesgo).
15
Sistemas de representación en coma fija
Binario puro (repaso)

• Sólo sirve para números positivos.


• Valor de un entero dado en binario puro:
n-1
A   ai  2i
i 0
• Rango: [0, 2n-1].
• Cambio de signo: no se puede hacer.
• Extensión de signo: poner ceros delante.
• Desbordamiento en sumas o restas: cuando se produce
un acarreo de orden superior.

En el computador, los números enteros sin signo se representan en binario puro.


El valor de un número dado en binario puro puede calcularse sin más que multiplicar cada dígito por
su peso y luego sumar todos los productos obtenidos.
El rango del sistema es [000…0, 111…1], es decir, [0,2n-1], donde n es el número de bits utilizado en
la representación.
En este sistema no puede realizarse la operación de cambio de signo.
La extensión de signo de n bits a m bits se realiza añadiendo m-n bits a 0 delante de la
representación original.
Si en sumas o restas se produce un bit de acarreo superior igual a 1, significa que se ha producido
desbordamiento en la operación.

16
Sistemas de representación en coma fija
Módulo y signo o signo-magnitud (repaso)

• El primer bit representa el signo y los n-1 restantes


codifican el módulo.
– Números positivos: bit de signo = 0.
– Números negativos: bit de signo = 1.
• Valor de un entero dado en módulo y signo:
n-2
A  (-1) an-1
  ai  2i
i 0
• Rango: [-(2n-1-1), 2n-1-1].
• Cambio de signo: invertir el bit de signo.
• Extensión de signo: poner ceros entre el bit de signo y
los bits de módulo.
• Desbordamiento en sumas o restas: cuando hay acarreo
de orden superior al operar con los módulos.

El sistema de módulo y signo o signo-magnitud es el método más sencillo para representar


cantidades con signo en el computador.
El valor de un número dado en módulo y signo puede calcularse sin más que tomar los n-1 bits
menos significativos y multiplicar cada uno de ellos por su peso, sumar todos los productos obtenidos
y poner el signo al resultado final (+ cuando el bit de signo es 0, y – cuando es 1).
El rango de los números positivos es [000…0, 011…1], es decir, [0,2n-1-1], mientras que el de los
negativos es [111…1, 1000…0] , es decir, [-(2n-1-1),-0]. Con ello, el rango total es [-(2n-1-1),2n-1-1], así
que es simétrico, y existe doble representación del 0.
El cambio de signo de un número en módulo y signo se realiza simplemente invirtiendo el valor del bit
de signo.
La extensión de signo de n bits a m bits se realiza añadiendo m-n bits a 0 entre medias del bit de
signo y los bits de módulo.
Si en sumas o restas se produce un bit de acarreo superior igual a 1 al operar con los módulos,
significa que se ha producido desbordamiento en la operación.

17
Sistemas de representación en coma fija
Complemento a 1 (repaso)

• Números positivos: igual que en módulo y signo (primer bit a 0).


• Números negativos: se pone el número en positivo y se le hace el
complemento a 1.
 Complemento a 1 de A: 2n-1-A.
 Hacer esta resta equivale a invertir todos los bits.
• Valor de un entero dado en complemento a 1:
n-2
A  (-1) an-1
  (ai  an-1 )  2i
i 0
• Rango: [-(2n-1-1), 2n-1-1].
• Cambio de signo: complementación.
• Extensión de signo: replicar el bit de signo.
• Restas: se hacen sumando el minuendo con el complemento a 1 del
sustraendo.
• Problema: a veces las sumas y las restas salen mal y hay que
corregir el resultado.

En el sistema de representación de complemento a 1, los números positivos se representan igual que


en módulo y signo. Sin embargo, para representar un número negativo, tomaremos su equivalente
positivo y lo complementaremos. Hacer el complemento a 1 de una cantidad A consiste en tomar su
representación original y realizar la operación 2n-1-A. Se da la circunstancia de que realizar esta
resta equivale a invertir todos los bits de la representación original de A.
El valor de un número dado en complemento a 1 se calcula directamente si es positivo, y si es
negativo lo complementaremos y lo calcularemos como si fuera positivo, poniéndole al final el signo
negativo.
El rango de los números positivos es [000…0, 011…1], es decir, [0,2n-1-1], mientras que el de los
negativos es [1000…0, 11…1] , es decir, [-(2n-1-1),-0]. Con ello, el rango total es [-(2n-1-1),2n-1-1], así
que es simétrico, con doble representación del 0.
El cambio de signo de un número en complemento a 1 se realiza mediante su complementación,
mientras que la extensión de signo de n bits a m bits se realiza repitiendo el bit superior m-n bits.
Para sumar dos cantidades, se suman sin más. Para restarlas, cambiaremos el signo del sustraendo y
sumaremos el resultado con el minuendo. Así, la operación de resta se puede realizar sin restar, lo
cual facilita las cosas y ahorra circuitería. El problema de las sumas y las restas es que en ciertos
casos el resultado es una unidad inferior a lo que debería salir, y es preciso corregirlo. Esto se detecta
cuando el acarreo superior de la operación realizada es 1.
El desbordamiento en sumas y restas se detecta cuando el signo del resultado es inesperado.
Entonces, en las sumas hay desbordamiento si los dos sumandos son positivos y el resultado es
negativo, o si los dos sumandos son dos negativos y el resultado es positivo. No puede haber
desbordamiento al sumar números de distinto signo.
En complemento a 1, el acarreo superior se desprecia, y no significa que haya desbordamiento en la
operación, sino que es preciso realizar una corrección en el resultado sumándole 1.
18
Sistemas de representación en coma fija
Complemento a 2 (repaso)

• Números positivos: igual que en módulo y signo (primer bit a 0).


• Números negativos: se pone el número en positivo y se le hace el
complemento a 2.
 Complemento a 2 de A: 2n-A.
 Hacer esta resta equivale a invertir todos los bits y sumar 1 al resultado.
 También equivale a copiar los bits el número de derecha a izquierda
hasta encontrar un 1, y después invertirlos todos.
• Valor de un entero dado en complemento a 2:
n-2
A  -an-1·2 n-1
  ai  2i
i 0
• Rango: [-2n-1, 2n-1-1].
• Cambio de signo: complementación.
• Extensión de signo: replicar el bit de signo.
• Restar: sumar el minuendo con el complemento a 2 del sustraendo.
– Este método también vale para hacer restas de números en
binario puro: la combinación binaria obtenida es idéntica.

En el sistema de representación de complemento a 2, los números positivos se representan igual que


en módulo y signo. Sin embargo, para representar un número negativo, se toma su equivalente
positivo y se complementa. Hacer el complemento a 2 de una cantidad A consiste en tomar su
representación original y realizar la operación 2n-A. Calcular esta resta equivale a invertir todos los
bits de la representación original de A y sumar 1 al resultado, y también a copiar los bits del dato de
derecha a izquierda hasta copiar un 1, para después invertir todos los bits a su izquierda.
El valor de un número dado en complemento a 2 se calcula directamente si es positivo, y si es
negativo hay que complementarlo y después calcularlo como si fuera positivo, añadiendo el signo
negativo al final de la operación.
El rango de los números positivos es [000…0, 011…1], es decir, [0,2n-1-1], mientras que el de los
negativos es [1000…0, 11…1] , es decir, [-2n-1,-0]. Con ello, el rango total es [-2n-1,2n-1-1], así que es
asimétrico, con representación única para el 0.
El cambio de signo de un número en complemento a 2 se realiza mediante su complementación, y
para hacer extensión de signo de n bits a m bits se repite el bit superior m-n bits.
Para sumar dos cantidades, se suman sin más. Para restarlas, se complementa el sustraendo y se
suma con el minuendo. Así, la resta se puede realizar sin restar, como en complemento a 1. Pero
ahora el resultado siempre será correcto, a no ser que haya desbordamiento, lo cual se detecta
cuando el signo del resultado es inesperado (puede suceder al sumar dos números de igual signo o al
restar dos números de distinto signo; no puede haber desbordamiento al sumar números de distinto
signo o restar números de igual signo). En complemento a 2 el acarreo superior se desprecia.
Por su facilidad de operación, el sistema de representación de complemento a 2 es el elegido para
representar números enteros con signo en coma fija en todos los computadores. Incluso las restas de
datos en binario puro se pueden realizar igual que en complemento a 2, pues la combinación binaria
obtenida al restar coincide con la obtenida al sumar el complementario del sustraendo.
19
Sistemas de representación en coma fija
Exceso a M o representación sesgada

• Exceso o sesgo (bias): cantidad que se suma a un número antes de


pasarlo a binario para su representación.
• Normalmente el sesgo está relacionado con la precisión (ancho del
dato). Opciones habituales:
 Sesgo = 2n-1.
 Sesgo = 2n-1 - 1.
• Valor de un entero dado en exceso a M:
n-1
A   ai  2i  M
i 0
• Rango: [-M, 2n-1-M].
• Cambio de signo: no es obvio.
• Extensión de signo: no se hace.
• Sumas: después hay que restar el sesgo.
• Restas: después hay que sumar el sesgo.

En el sistema de representación en exceso a M o representación sesgada, se suma M (sesgo o bias)


a la cantidad que queremos representar, y después se pasa a binario.
M es un valor relacionado con el ancho de los datos (precisión). En números de M bits, el sesgo suele
ser M=2n-1 o M=2n-1-1.
Si tenemos un número binario representado en exceso a M y queremos saber cuál es su valor, le
aplicaremos la fórmula que se usaba para conocer el valor de una cantidad en binario puro, y al
resultado le restaremos el sesgo.
Por el contrario, si tenemos un dato X en decimal y queremos pasarlo a exceso a M, sumaremos
X+M y el resultado lo pasaremos a binario por el método habitual.
El rango del sistema es [000…0-M, 011…1-M], es decir, [-M,2n-1-M]. El 0 tiene representación única.
El cambio de signo de un número en exceso es complicado, porque depende del exceso aplicado. Por
su parte, la extensión de signo no tiene sentido, porque al cambiar el ancho de un dato normalmente
también cambia el valor del sesgo.
Para sumar dos cantidades, se suman sin más, y al resultado se le quita el sesgo. En las restas, tras
realizarlas tendremos que sumar el sesgo al resultado.

20
Sistemas de representación en coma fija
Cuadro resumen de coma fija

Aquí se presenta un cuadro comparativo de los sistemas más comúnmente utilizados a la hora de
representar números en coma fija sin parte fraccionaria.

En el computador, los números enteros sin signo se representan en binario puro.

Lo más habitual es que los números enteros con signo se representen en complemento a 2. Este
sistema presenta la ventaja de que los números se pueden sumar directamente, y que para hacer la
resta basta con sumar el minuendo con el complementario del sustraendo. Al no tener doble
representación del 0, el resultado obtenido en la operación es siempre correcto, salvo que exceda el
rango de representación del sistema.

Los sistemas de magnitud-signo y exceso a M se utilizan para representar la mantisa y el exponente


de los números en coma flotante, como veremos a continuación. Operar con datos de magnitud-signo
no es cómodo, pero convertir un dato de magnitud-signo a complemento a 2 para operar es bastante
sencillo, y consume muy poco tiempo en relación con el tiempo de ejecución de cualquier operación
en coma flotante.

21
Índice

1. Introducción.
2. Sistemas de representación numérica.
3. Aritmética binaria.
4. Sistemas de representación en coma fija.
5. Sistemas de representación en coma flotante.
6. Representación de caracteres alfanuméricos.
7. Representación de datos numéricos: texto frente a binario.

22
Sistemas de representación en coma flotante
Notación científica y normalización

• Notación científica: usado por los científicos para cantidades


numéricas.
– Elementos: base (b = 10) / mantisa (M, en coma fija) / exponente (exp,
entero).
– X = M · bexp = M · 10exp
– Ejemplos:
X = -298,823 · 10-25, Y = 9,253662 · 103, Z = 0,003157 · 10-4, V = -8046,44 · 1019
• Normalización: poner la coma de la mantisa en una posición dada.
• Normalizaciones más frecuentes:
– Coma a la derecha del dígito más significativo (1  |M| < b)
 X = -298,823 · 10-25 = -2,98823 · 10-23
 Y = 9,253662 · 103 ya está normalizado
 Z = 0,003157 · 10-4 = 3,157 · 10-7
 V = -8046,44 · 1019 = -8,04644 · 1022
– Coma a la izquierda del dígito más significativo (0 < |M| < 1)
 X = -298,823 · 10-25 = -0,298823 · 10-22
 Y = 9,253662 · 103 = 0,9253662 · 104
 Z = 0,003157 · 10-4 = 0,3157 · 10-6
 V = -8046,44 · 1019 = -0,804644 · 1023

La notación científica es el sistema utilizado por los científicos para representar cantidades numéricas
de forma que sean fácilmente expresables (una mantisa M con un formato sencillo) y comparables (la
mantisa va multiplicada por 10 elevado a un exponente exp).
Los números en notación científica se expresan del siguiente modo: X = M · 10exp. Tanto la mantisa
como el exponente pueden ser positivos o negativos. El signo de X es el signo de la mantisa,
mientras que el signo del exponente indica si X es un número cuyo valor absoluto es grande
(positivo) o pequeño (negativo).
La mantisa es una cantidad que tiene parte entera y parte fraccionaria. Para hacer las cosas más
sencillas, la notación científica utiliza mantisa normalizada, lo cual significa que la coma que separa
las dos partes de la misma está en un lugar determinado de antemano, que suele ser a la derecha del
primer dígito significativo (mantisas entre 1 y 9,99999…) o a la izquierda del primer dígito significativo
(mantisas entre 0 y 0,99999…).
Si las mantisas están normalizadas, entonces es muy fácil comparar cantidades para ver para ver cuál
tiene mayor valor absoluto. Cuando el exponente de la cantidad X es mayor que el de la cantidad Y,
entonces |X| > |Y|, y si los exponentes de ambas cantidades son iguales, entonces el mayor
módulo viene dado por la mayor mantisa.

23
Sistemas de representación en coma flotante
Características de los sistemas de coma flotante

• Coma flotante (floating point): notación científica expresada en base 2.


X = M · 2exp = (-1)s · |M| · 2exp
– M: coma fija, con mantisa fraccionaria normalizada.
 Números positivos: s=0 / números negativos: s=1.
– Exponente (exp): entero en coma fija.
• Normalizaciones más frecuentes para la mantisa:
– Coma a la izquierda del bit más significativo (0 < |M| < 1): 0,1xxxx…
– Coma a la derecha del bit más significativo (1  |M| < 2): 1,xxx…
• Bit implícito: no se guarda internamente porque se sabe cuál es su
posición y valor.
• Rango: [-Mn · 2Exp, -mn · 2exp]  [mp · 2exp, Mp · 2Exp]
– Hueco de cantidades no representables alrededor del 0 (incluido el propio 0):
(-mn · 2exp, mp · 2exp)

La coma flotante (floating point) es un sistema que representa números en el computador de forma
similar a como se representan números en notación científica: con una mantisa que va multiplicada
por la base elevada a un exponente entero. Evidentemente, aquí la base es 2. A menudo se tratan
por separado el signo s y el módulo |M| de la mantisa, así que los números en coma flotante se
suelen expresar sobre papel como X = M · 2exp = (-1)s · |M| · 2exp.
El exponente (exp) es un entero expresado en coma fija, y puede ser positivo o negativo. El
conjunto signo-mantisa (M) también se expresa en coma fija, pero la mantisa tiene parte
fraccionaria y está normalizada. En números positivos, s=0, y en números negativos, s=1. Las
normalizaciones más frecuentes para la mantisa son (en negrita aparece el bit más significativo):
• Coma a la izquierda del bit más significativo (0 < |M| < 1): 0,1xxxx…
• Coma a la derecha del bit más significativo (1  |M| < 2): 1,xxx…
El bit más significativo de una mantisa no nula siempre vale 1. Si usamos normalización, dicho bit
ocupa una posición conocida, y no se suele almacenar internamente, dando lugar a la técnica del bit
implícito (bit que no se almacena pero que se incorpora a la hora de hacer operaciones).
Si la mantisa está normalizada siempre tiene algún bit a 1, por lo que no se puede representar el
número X=0.
Si mp y Mp son la menor y mayor mantisa positiva, -mn y -Mn son mayor y menor mantisa negativa,
y exp y Exp son los exponentes menor y mayor respectivamente, el rango de los números positivos
representables será [mp · 2exp, Mp · 2Exp], y el de los negativos será [-Mn · 2Exp, -mn · 2exp].
Así, el rango total de cantidades representables será [-Mn · 2Exp, -mn · 2exp]  [mp · 2exp, Mp · 2Exp].
Se observa entonces que en un sistema de coma flotante con mantisa normalizada, existe un hueco
alrededor del 0 formado por cantidades que no se pueden representar, y que es (-mn · 2exp, mp · 2exp).

24
Sistemas de representación en coma flotante
IEEE 754 precisión simple (32 bits)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
S EXPONENTE MANTISA

(–1)s × 1,m × 2exp–127 si 0 < exp < 255

(–1)s × 0,m × 2–126 si exp = 0 (caso desnormalizado)

0 si exp = m = 0
N=
+∞ si exp = 255, m = 0, s = 0

–∞ si exp = 255, m = 0, s = 1

NaN (“Not a Number”) si exp = 255, m ≠ 0

s = signo de la mantisa
m = módulo de la mantisa almacenada (sin bit implícito)
exp = exponente almacenado (sin descontar exceso)

En un principio, cada fabricante tenía su propio sistema de representación de cantidades en coma


flotante. Ante esta diversidad de sistemas, se propuso una normalización, dando lugar al estándar
IEEE 754 de representación de números en coma flotante, que hoy es utilizado de forma
prácticamente universal. A continuación se describen las características básicas de este sistema de
representación.
La mantisa se representa en coma fija, con parte fraccionaria, y está normalizada con coma a la
derecha del dígito más significativo, es decir, que la parte entera de los números siempre es 1, salvo
que estemos en algún caso especial. El sistema utilizado para ello es magnitud-signo, aunque en la
representación interna el signo está separado de la mantisa. Como en los números normalizados la
parte entera de la mantisa siempre es 1, dicha parte fraccionaria no se almacena en la representación
interna del número (técnica del bit implícito). En cualquier caso, cuando se va a trabajar con datos
en coma flotante, hay que añadir dicha parte entera antes de operar.
El exponente tiene n bits y se representa en exceso a 2n-1-1.
En IEEE 754 de precisión simple las cantidades se representan utilizando 32 bits, de los cuales 8
son para el exponente (exp) y 23 para la parte fraccionaria de la mantisa (m), reservándose 1 bit
para el signo de la propia mantisa, que es a su vez el signo del número representado.
Los números normalizados se representan mediante exponentes distintos de 00000000 y 11111111.
Por tanto, y teniendo en cuenta que el exponente se representa en exceso a 127, el rango de
exponentes permitido es desde -126 hasta 127. En este caso, el valor de una cantidad representada
en forma normalizada es (-1)s · 1,m · 2exp-127.

(CONTINÚA EN LA PÁGINA SIGUIENTE)

25
Sistemas de representación en coma flotante
IEEE 754 precisión doble (64 bits)

63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
S EXPONENTE MANTISA

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MANTISA (CONTINUACIÓN)

(–1)s × 1,m × 2exp–1023 si 0 < exp < 2047

(–1)s × 0,m × 2–1022 si exp = 0 (caso desnormalizado)

0 si exp = m = 0
N=
+∞ si exp = 2047, m = 0, s = 0

–∞ si exp = 2047, m = 0, s = 1

NaN (“Not a Number”) si exp = 2047, m ≠ 0


s = signo de la mantisa
m = módulo de la mantisa almacenada (sin bit implícito)
exp = exponente almacenado (sin descontar exceso)

(VIENE DE LA PÁGINA ANTERIOR)

Cuando el exponente es 00000000, el número está sin normalizar. Se pueden dar dos situaciones,
contempladas como casos especiales en la representación:
• Si la mantisa tiene todos sus bits a 0, entonces estamos ante la representación del 0 (que
puede ser dual, porque puede llevar signo positivo o negativo).
• Si la mantisa es distinta de 0, entonces el valor del número representado es (-1)s · 0,m · 2-
126, y dicha mantisa estará sin normalizar (es decir, que el primer dígito distinto de 0 puede

estar en cualquier posición).


Cuando el exponente es 11111111, estamos ante otros dos casos especiales, dependiendo del valor
de la mantisa almacenada:
• Si ésta es todo 0, entonces estaremos ante los números +∞ y -∞, que se obtienen cuando
el resultado de una operación excede el rango de representación disponible.
• Si la mantisa almacenada tiene uno o más bits a 1, entonces estaremos ante un NaN (“Not a
Number), que se obtiene cuando se realiza alguna operación sin sentido (por ejemplo, al
intentar calcular la raíz cuadrada de un número negativo). Los NaN se propagan entre
operaciones, de forma que pueda comprobarse que en algún momento se ha cometido un
error en alguna operación y se permita descartar el resultado obtenido.
En IEEE 754 de precisión doble, las cantidades se representan utilizando 64 bits. Por tanto, los
tamaños de los campos varían, y también lo hacen los rangos de representación. Pero los principios
básicos de este sistemas son los mismos que los de la precisión simple, incluyendo la tipología de los
casos especiales.

26
Sistemas de representación en coma flotante
Ejemplo de conversión de IEEE 754 precisión simple a base 10

N = C0A0000016,IEEE754,s =
= 1100 0000 1010 0000 0000 0000 0000 00002,IEEE754,s

s exp m

1. Bit de signo: s = 1 (nº negativo)


2. Exponente: exp = 100000012,exc.127 = 12910,exc.127 = 12910 – 12710 = 210
3. Mantisa: 1,01000000000000000000002 = 20 + 2–2 = 1,2510
4. Resultado: N = – 1,25 × 22 = –5

Para escribir la representación interna de un número en coma flotante deberíamos escribir una
secuencia de 32 bits. Para hacer las cosas más sencillas, se utiliza la llamada representación
compacta hexadecimal, que consiste en tomar los bits de la representación interna del número de
cuatro en cuatro, y traducir cada uno de estos grupos de 4 a su representación hexadecimal.

Si queremos saber cuáles son los valores de los campos de la representación, debemos recuperar
todos los bits traduciendo de hexadecimal a binario, y después separarlos en sus campos: el primer
bit es el signo de la mantisa, los ocho siguientes son la representación binaria del exponente, y los 23
siguientes son la parte fraccionaria de la mantisa.

Este ejemplo corresponde con un caso normalizado, con exponente distinto de 00000000 y 11111111.
Por tanto, su valor se obtiene mediante la fórmula para casos normalizados: la parte entera de la
mantisa es un 1 que no está almacenado (bit implícito) y el exponente está en exceso a 127 (hay que
restar el exceso para conocer su valor).

27
Sistemas de representación en coma flotante
Ejemplo de conversión de IEEE 754 precisión simple a base 10

N = 4237000016,IEEE754,s =
= 0100 0010 0011 0111 0000 0000 0000 00002,IEEE754,s

s exp m

1. Bit de signo: s = 0 (nº positivo)


2. Exponente: exp = 100001002,exc.127 = 13210,exc.127 = 13210 – 12710 = 510
3. Mantisa: 1,011011100000000000000002 = 20+2–2+2–3+2–5+2–6+2–7 = 1,4335910
4. Resultado: N = 1,43359 × 25 = 45,875

Este ejemplo también corresponde con un número normalizado, y se resuelve de igual manera que el
anterior.

28
Sistemas de representación en coma flotante
Ejemplo de conversión de IEEE 754 precisión simple a base 10

N = C425A00016,IEEE754,s =
= 1100 0100 0010 0101 1010 0000 0000 00002,IEEE754,s

s exp m

1. Bit de signo: s = 1 (nº negativo)


2. Exponente: exp = 100010002,exc.127 = 13610,exc.127 = 13610 – 12710 = 910
3. Mantisa: 1,010010110100000000000002 = 1,2939510
4. Resultado: N = – 1,29395 × 29 = –662,5

Este ejemplo también corresponde con un número normalizado, y se resuelve de igual manera que el
anterior.

29
Sistemas de representación en coma flotante
Ejemplo de conversión de IEEE 754 precisión simple a base 10

N = 004B000016,IEEE754,s =
= 0000 0000 0100 1011 0000 0000 0000 00002,IEEE754,s

s exp m

1. Bit de signo: s = 0 (nº positivo)


2. Exponente: exp = 000000002,exc.127  CASO ESPECIAL: NO HAY BIT
IMPLÍCITO EN LA MANTISA
3. Mantisa: 0,100101100000000000000002 = 0,585937510
4. Resultado: N = 0,5859375 × 2-126 = 6,88766 × 10-39

Este ejemplo corresponde con un número sin normalizar, ya que el exponente es 00000000. Dado que
la mantisa tiene bits a 1, entonces se aplica la fórmula para números desnormalizados, con la parte
entera de la mantisa igual a 0, y el exponente igual a -126.

30
Sistemas de representación en coma flotante
Ejemplo de conversión de IEEE 754 precisión simple a base 10

N = 8000000016,IEEE754,s =
= 1000 0000 0000 0000 0000 0000 0000 00002,IEEE754,s

s exp m

1. Bit de signo: s = 1 (nº negativo)


2. Exponente: exp = 000000002,exc.127  CASO ESPECIAL: NO HAY BIT
IMPLÍCITO EN LA MANTISA
3. Mantisa: 0,000000000000000000000002 = 010
4. Resultado: N = 0

Este ejemplo corresponde con un número sin normalizar, ya que el exponente es 00000000. Dado que
la mantisa tiene todos sus bits a 0, entonces estamos ante la representación del 0.

31
Sistemas de representación en coma flotante
Ejemplo de conversión de IEEE 754 precisión simple a base 10

N = 7F80000016,IEEE754,s =
= 0111 1111 1000 0000 0000 0000 0000 00002,IEEE754,s

s exp m

1. Bit de signo: s = 0 (nº positivo)


2. Exponente: exp = 111111112,exc.127  CASO ESPECIAL:  o NaN
3. Mantisa: 000000000000000000000002
4. Resultado: N = +

Este ejemplo corresponde con un caso especial, ya que su exponente es 11111111. Como todos los
bits de la mantisa con 0, y el signo de la misma es positivo, tenemos el +∞.

32
Sistemas de representación en coma flotante
Ejemplo de conversión de IEEE 754 precisión simple a base 10

N = FF80040016,IEEE754,s =
= 1111 1111 1000 0000 0100 0000 0000 00002,IEEE754,s

s exp m

1. Bit de signo: s = 1 (nº negativo)


2. Exponente: exp = 111111112,exc.127  CASO ESPECIAL:  o NaN
3. Mantisa: 00000000100000000000000 NO NULA
4. Resultado: N = NaN -- Not a Number

Este ejemplo corresponde con un caso especial, ya que su exponente es 11111111. Como la mantisa
tiene bits a 1, entonces tenemos un NaN (“Not a Number”).

33
Sistemas de representación en coma flotante
Ejemplo de conversión de base 10 a IEEE 754 precisión simple

N = –0,7510
1. Expresarlo en binario: –0,7510 = –0,112
2. Normalizar: –0,112 = –1,12×2–1
3. Cálculo del exponente en exceso:
exp = –110 + 12710 = 12610,exc.127 = 011111102,exc.127
4. Cálculo de mantisa:
m = 1,10000000000000000000000 (el bit implícito no se almacena)
5. Bit de signo: s = 1 (nº negativo)
6. Representación en precisión simple:
1 0 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S EXPONENTE MANTISA

7. Representación en notación compacta hexadecimal:


N = 1011 1111 0100 0000 0000 0000 0000 00002,IEEE754,s =
= BF40000016,IEEE754,s

Para convertir un número de decimal a coma flotante, tenemos que convertirlo a binario con el
formato ±M.2exp, estando la mantisa normalizada en el rango [1,2). Entonces se obtendrán los valores
de los campos de signo, mantisa y exponente, y cada uno se convierte al tipo de representación que
le corresponde: la mantisa se pone en magnitud-signo (eliminando la parte entera de la misma, que
es el bit implícito), y el exponente en exceso a 127 (sumándole el exceso).

34
Sistemas de representación en coma flotante
Errores de representación y técnicas de redondeo

• La coma flotante representa los números reales de forma


aproximada.
– Resolución: distancia entre dos números consecutivos: 2exp-f.
– Error absoluto ea = | X-X’|.
– Error relativo: cociente entre el error absoluto y la cantidad real.
• Si para representar una cantidad X necesitamos más bits de
mantisa de los que caben en la representación, es necesario
aplicar una técnica de redondeo:
– Redondeo hacia 0.
– Redondeo hacia +.
– Redondeo hacia -.
– Redondeo al valor más próximo.

La coma flotante constituye un sistema de representación aproximada de los números reales,


dado que existe un tamaño finito para la mantisa. Por tanto, al utilizar la coma flotante se comete un
error en la representación de cantidades. Además, al contar con un tamaño finito para el exponente,
el valor absoluto de los números representables está limitado.
Se denomina resolución a la distancia entre dos números consecutivos. Se observa que los sistemas
de coma flotante presentan resolución variable a lo largo del rango de representación, ya que
depende del valor del exponente. Si el peso del bit menos significativo de la mantisa es –f, la
resolución es 2-f · 2exp = 2exp-f. Entre dos números representables consecutivos existen infinitos
números reales que deben representarse mediante aproximación, motivo por el cual al utilizar el
sistema de coma flotante se comete un error en la representación.
Se denomina error absoluto (ea) al valor absoluto de la diferencia entre la cantidad real X y la
aproximación X’ utilizada para representarla, Por tanto, ea = | X-X’|. El error absoluto está acotado
superiormente por la resolución: ea < 2exp-f. Para exponentes pequeños, el error absoluto cometido es
pequeño, pero para exponentes grandes el error absoluto puede ser enorme. Además, como
trabajamos con cantidades representadas de forma aproximada, el error cometido al realizar
operaciones aritméticas con ellas puede llegar a ser muy significativo.
Se denomina error relativo al cociente entre el error absoluto y la cantidad real. El error relativo
viene a indicar el porcentaje de error cometido al representar una cantidad en relación a la cantidad
misma.
Es preciso representar una cantidad de forma aproximada si para representarla de forma exacta
necesitamos más bits en la mantisa de los que caben en el campo correspondiente. En tal caso, habrá
una serie de bits sobrantes que podremos utilizar para aplicar alguna técnica de redondeo. El
redondeo consistirá en ajustar los últimos bits de la mantisa de acuerdo con algún criterio establecido.
Estudiaremos las técnicas de redondeo hacia 0, hacia +, hacia - y el redondeo al valor más
próximo.
35
Sistemas de representación en coma flotante
Redondeo hacia 0

• También denominado redondeo por truncamiento.


• Se eliminan los bits sobrantes sin más.

Xj+1 = Xj + 2exp-f Xi+1 = Xi + 2exp-f


Xj y Xj+1 son números Xi y Xi+1 son números
representables consecutivos representables consecutivos

XMj = (Xj+1 + Xj) / 2 XMi = (Xi+1 + Xi) / 2


XMj es el punto medio entre ambos XMi es el punto medio entre ambos

Xj XMj Xj+1 0 Xi XMi Xi+1

R5 R2
R4 R6 R1 R3
- +

R1, R2 y R3 se aproximan por Xi


R4, R5 y R6 se aproximan por Xj+1

Cuando se aplica la técnica de redondeo hacia 0, también denominada redondeo por truncamiento
o simplemente truncamiento, basta con eliminar los bits que no caben en la representación. Por
tanto, si una cierta cantidad R se encuentra en el interior del intervalo (Xi,Xi+1), será representada
por aquélla que tiene menor valor absoluto (la que está más cerca del 0).
Veamos un ejemplo. Sea el número X=23,1, el cual queremos representar según el estándar IEEE
754 de precisión simple. Al pasarlo a binario con 25 bits para la parte fraccionaria tenemos que
X=10111,0001100110011001100110011…2
Esta es una cantidad periódica, con lo cual no existe ningún sistema en coma flotante binaria que
pueda representarlo de forma exacta. Al normalizarlo obtenemos que
X≈1,011100011001100110011001100112 · 24
donde hay varios dígitos sobrantes (dígitos de redondeo) que aparecen en cursiva.
Se observa que X está dentro del intervalo
(1,011100011001100110011002 · 24 , 1,011100011001100110011012 · 24)
Con redondeo hacia 0, eliminamos los dígitos de redondeo, con lo que la aproximación de X será
X’=1,011100011001100110011002 · 24
Ordenados sus campos y añadiendo el bit de signo tendremos la siguiente representación:
0 10000011 01110001100110011001100
Utilizando la notación compacta hexadecimal, el número representado será 41B8CCCC.
Con X=-23,1 sólo cambiaría el bit de signo, y su codificación sería
1 10000011 01110001100110011001100
Con notación hexadecimal, el número representado sería C1B8CCCC.

36
Sistemas de representación en coma flotante
Redondeo hacia +∞

• También denominado redondeo por exceso.


• El número se representa por la cantidad representable
inmediatamente superior.
Xj+1 = Xj + 2exp-f Xi+1 = Xi + 2exp-f
Xj y Xj+1 son números Xi y Xi+1 son números
representables consecutivos representables consecutivos

XMj = (Xj+1 + Xj) / 2 XMi = (Xi+1 + Xi) / 2


XMj es el punto medio entre ambos XMi es el punto medio entre ambos

Xj XMj Xj+1 0 Xi XMi Xi+1

R5 R2
R4 R6 R1 R3
- +

R1, R2 y R3 se aproximan por Xi+1


R4, R5 y R6 se aproximan por Xj+1

Cuando se aplica la técnica de redondeo hacia +∞, también denominada redondeo por exceso,
si una cierta cantidad R se encuentra en el interior del intervalo (Xi,Xi+1), será representada por el
extremo derecho del intervalo, es decir, por Xi+1. En caso de que R sea positivo, Xi+1 es el extremo
con mayor valor absoluto, mientras que si R es negativo, Xi+1 es el extremo más cercano a 0.
Para X=23,1, su representación binaria era X≈1,011100011001100110011001100112 · 24, y sabemos
que está dentro del intervalo
(1,011100011001100110011002 · 24 , 1,011100011001100110011012 · 24)
Entonces, su representación aproximada con redondeo por exceso será
X’=1,011100011001100110011012 · 24
Ordenados sus campos y añadiendo el bit de signo tendremos la siguiente representación:
0 10000011 01110001100110011001101
Utilizando la notación compacta hexadecimal, el número representado será 41B8CCCD.
Si X=-23,1, el intervalo será
(-1,011100011001100110011012 · 24 , -1,011100011001100110011002 · 24)
Y entonces, usando redondeo por exceso, X se aproximará por
X’=-1,011100011001100110011002 · 24
Ordenados sus campos y añadiendo el bit de signo tendremos la siguiente representación:
1 10000011 01110001100110011001100
Utilizando la notación compacta hexadecimal, el número representado será C1B8CCCC.

37
Sistemas de representación en coma flotante
Redondeo hacia -∞

• También denominado redondeo por defecto.


• El número se representa por la cantidad representable
inmediatamente inferior.
Xj+1 = Xj + 2exp-f Xi+1 = Xi + 2exp-f
Xj y Xj+1 son números Xi y Xi+1 son números
representables consecutivos representables consecutivos

XMj = (Xj+1 + Xj) / 2 XMi = (Xi+1 + Xi) / 2


XMj es el punto medio entre ambos XMi es el punto medio entre ambos

Xj XMj Xj+1 0 Xi XMi Xi+1

R5 R2
R4 R6 R1 R3
- +

R1, R2 y R3 se aproximan por Xi


R4, R5 y R6 se aproximan por Xj

Cuando se aplica la técnica de redondeo hacia -∞, también denominada redondeo por defecto, si una
cierta cantidad R se encuentra en el interior del intervalo (Xi,Xi+1), será representada por el extremo
izquierdo del intervalo, es decir, por Xi. En caso de que R sea positivo, Xi es el extremo con menor
valor absoluto, mientras que si R es negativo, Xi es el extremo con mayor valor absoluto, es decir, el
más lejano a 0.
Para X=23,1, su representación binaria era X≈1,011100011001100110011001100112 · 24, y sabemos
que está dentro del intervalo
(1,011100011001100110011002 · 24 , 1,011100011001100110011012 · 24)
Entonces, con redondeo por defecto su representación aproximada es
X’=1,011100011001100110011002 · 24
Ordenados sus campos y añadiendo el bit de signo tendremos la siguiente representación:
0 10000011 01110001100110011001100
Utilizando la notación compacta hexadecimal, el número representado será 41B8CCCC.
Si X=-23,1, el intervalo será
(-1,011100011001100110011012 · 24 , -1,011100011001100110011002 · 24)
Y entonces, usando redondeo por defecto, X se aproximará por
X’=-1,011100011001100110011012 · 24
Ordenados sus campos y añadiendo el bit de signo tendremos la siguiente representación:
1 10000011 01110001100110011001101
Utilizando la notación compacta hexadecimal, el número representado será C1B8CCCD.

38
Sistemas de representación en coma flotante
Redondeo al valor más próximo (I)

• Es el sistema más preciso.


• La decisión se toma en función del valor de los bits
sobrantes (bits de redondeo).
• Valor de los bits de redondeo para números positivos:
Xi+1 = Xi + 2exp-f
XM = (Xi+1 + Xi) / 2
Xi y Xi+1 son números positivos
XM es el punto medio entre ambos
representables consecutivos

Xi Xi+1
XM

Bits sobrantes Bits sobrantes


0X...X 1X...X
con algún X<>1
Bits sobrantes Bits sobrantes Bits sobrantes
00...0 100...0 00...0

• Números negativos: caso simétrico.


Cuando se aplica la técnica de redondeo al valor más próximo, se comete el menor error posible.
Supongamos un número R positivo que se encuentra en el interior del intervalo (Xi,Xi+1). Los bits
sobrantes (bits de redondeo) serán:
• 0XXX…X con algún X igual a 1 en caso de que se encuentre en la mitad izquierda del
intervalo.
• 1XXX…X con algún X igual a 1 en caso de que se encuentre en la mitad derecha del
intervalo.
• 1000…0 cuando justamente se encuentre en el punto medio del intervalo.
Si R fuera negativo, tendríamos el caso simétrico, es decir, que los bits de redondeo serían:
• 0XXX…X con algún X igual a 1 en caso de que se encuentre en la mitad derecha del
intervalo.
• 1XXX…X con algún X igual a 1 en caso de que se encuentre en la mitad izquierda del
intervalo.
• 1000…0 cuando justamente se encuentre en el punto medio del intervalo.
En cualquier caso, tanto si tratamos con números positivos como si son negativos, es obvio que la
mantisa de uno de los extremos del intervalo terminará por 0, mientras que la mantisa del otro
extremo terminará por 1, puesto que al restarlos el resultado será ±2exp-f, que es precisamente
±0,00…01 · 2exp, es decir, la diferencia es de una unidad del último bit de la mantisa.

39
Sistemas de representación en coma flotante
Redondeo al valor más próximo (II)

• Con redondeo al valor más próximo, las cantidades se


aproximan por el valor representable más cercano.
• Punto medio: se toma el extremo con mantisa acabada en 0.
Xj+1 = Xj + 2exp-f Xi+1 = Xi + 2exp-f
Xj y Xj+1 son números negativos Xi y Xi+1 son números positivos
representables consecutivos representables consecutivos
XMj = (Xj+1 + Xj) / 2 XMi = (Xi+1 + Xi) / 2
XMj es el punto medio entre ambos XMi es el punto medio entre ambos

Xj XMj Xj+1 0 Xi XMi Xi+1

R5 R2
R4 R6 R1 R3
- +

Bits sobrantes 1X...X Bits sobrantes 0X...X Bits sobrantes 0X...X Bits sobrantes 1X...X
con algún X<>1 Se aproxima por Xj+1 Se aproxima por Xi con algún X<>1
Se aproxima por Xj Se aproxima por Xi+1

Bits sobrantes 100...0 Bits sobrantes 100...0


Se aproxima por el candidato cuya mantisa acabe por 0 Se aproxima por el candidato cuya mantisa acabe por 0

Entonces:
• Si R está en la mitad izquierda del intervalo, se aproximará por el extremo izquierdo Xi , que
es el más cercano, con lo que el error absoluto cometido se minimiza.
• Si R está en la mitad derecha del intervalo, se aproximará por el extremo derecho Xi+1 , que
en este caso será el más cercano, minimizándose también el error absoluto.
• Si R está en el centro del intervalo, se cometería el mismo error al aproximarlo por un
extremo o por el otro. El estándar IEEE 754 dice que en este caso R se aproximará por
aquél de los dos extremos cuya mantisa termine por 0.
Para X=23,1, su representación binaria era X≈1,011100011001100110011001100112 · 24. Se observa
que el primer bit sobrante es 1, y hay más bits sobrantes que valen 1, por lo cual X se encuentra en
la mitad derecha del intervalo, y con redondeo al valor más próximo debe ser representado por el
extremo derecho del mismo. Entonces su representación aproximada es
X’=1,011100011001100110011012 · 24
Ordenados sus campos y añadiendo el bit de signo tendremos la siguiente representación:
0 10000011 01110001100110011001101
Utilizando la notación compacta hexadecimal, el número representado será 41B8CCCD.
Si X=-23,1, con redondeo al valor más próximo se aproximará por
X’=-1,011100011001100110011012 · 24
Ordenados sus campos y añadiendo el bit de signo tendremos la siguiente representación:
1 10000011 01110001100110011001101
Utilizando la notación compacta hexadecimal, el número representado será C1B8CCCD.
Cuando se utiliza redondeo al valor más próximo, la cota del error absoluto se reduce a la mitad, ya
que el error cometido es siempre inferior a la mitad del ancho del intervalo (Xi,Xi+1).
40
Sistemas de representación en coma flotante
Ejemplo de conversión de base 10 a IEEE 754 precisión simple

N = –23,110
1. Expresarlo en binario: –23,110  –10111,00011001100110011001100112
2.a. Normalizar:
-10111,00011001100110011001100112  -1,01110001100110011001100110011×24
2.b. Redondear al valor más próximo:
-1,01110001100110011001100110011×24  -1,01110001100110011001101×24
3. Cálculo del exponente en exceso:
exp = 410 + 12710 = 13110,exc.127 = 100000112,exc.127
4. Cálculo de mantisa:
m = 1,01110001100110011001101 (el bit implícito no se almacena)
5. Bit de signo: s = 1 (nº negativo)
6. Representación en precisión simple:
1 1 0 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1
S EXPONENTE MANTISA

7. Representación en notación compacta hexadecimal:


N = 1100 0001 1011 1000 1100 1100 1100 11012,IEEE754,s =
= C1B8CCCD16,IEEE754,s

Cuando tengamos que realizar la conversión de una cantidad que no pueda representarse de forma
exacta, obtendremos bits de sobra para la mantisa y aplicaremos redondeo al valor más próximo.

Puede suceder que, al redondear la mantisa, la cantidad quede desnormalizada, con lo cual habría
que repetir de nuevo los pasos de normalización y redondeo.

41
Sistemas de representación en coma flotante
Ejemplo de conversión de base 10 a IEEE 754 precisión simple

N = 2,567510 x 1015
1. Expresarlo en binario: 2,567510 x 1015  1,23E415A16 x 251 =
= 1,00100011111001000001010110102 x 251
2.a. Normalizar: 1,00100011111001000001010110102 x 251 está normalizado.
2.b. Redondear al valor más próximo:
1,00100011111001000001010110102 x 251  1,001000111110010000010112 x 251
3. Cálculo del exponente en exceso:
exp = 5110 + 12710 = 17810,exc.127 = 101100102,exc.127
4. Cálculo de mantisa:
m = 1,00100011111001000001011 (el bit implícito no se almacena)
5. Bit de signo: s = 0 (nº positivo)
6. Representación en precisión simple:
0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 0 1 0 1 1
S EXPONENTE MANTISA

7. Representación en notación compacta hexadecimal:


N = 0101 1001 0001 0001 1111 0010 0000 10112,IEEE754,s =
= 5911F20B16,IEEE754,s

Aquí el problema está en la conversión de la cantidad inicial a binario. Supongamos, sin pérdida de
generalidad, que N es positivo (si fuera negativo, usaríamos su valor absoluto y pondríamos s=1 en el
paso 5 de la conversión). El objetivo será poner N en el formato 𝑁 𝑀 2 (ecuación 1), donde
1 |𝑀| 2 y 𝑒𝑥𝑝 ∈ ℤ , es decir, exp será un número entero. Así la mantisa estará ya normalizada y la
conversión resultará muy sencilla.
Lo primero será averiguar el valor de exp. Podemos hacer 𝑁 2 (ecuación 2), donde
𝑒𝑥𝑝 𝐸𝑥𝑝 (parte entera de Exp) (ecuación 3). Entonces se cumplirá que 𝐸𝑥𝑝 𝑝 𝑒𝑥𝑝, donde
𝑝 ∈ 0,1 , y 𝑁 2 2 2 2 (ecuación 4). Aplicando logaritmos a la ecuación 2,
ln 𝑁 ln 2 𝐸𝑥𝑝 ln 2, y despejando obtenemos que 𝐸𝑥𝑝 . Introduciendo esta expresión
en la ecuación 3, vemos que el valor del exponente es 𝑒𝑥𝑝 (ecuación 5), es decir, que el
exponente se calculará como la parte entera del cociente del logaritmo de N por el logaritmo de 2.
Igualando las ecuaciones 1 y 4, 𝑁 𝑀 2 2 2 (ecuación 6). Comparando ambos
términos de la igualdad, vemos que 𝑀 2 con 𝑀 ∈ 1,2 , ya que 𝑝 ∈ 0,1 , y M estará normalizada.
Para saber el valor de M usaremos la ecuación 1. Como conocemos el valor de exp, basta con
despejar la mantisa: 𝑀 (ecuación 7).
En resumen, antes de hacer el paso a binario pondremos 𝑁 𝑀 2 , y calcularemos M y exp
mediante las siguientes expresiones:
• 𝑒𝑥𝑝 (ecuación 5).
• 𝑀 (ecuación 7).

A partir de aquí, pasaremos a binario la mantisa (quizá usando la conversión a hexadecimal como
paso intermedio), y continuaremos por el paso 2 de normalización y redondeo.

42
Sistemas de representación en coma flotante
Ejemplo de conversión de base 10 a IEEE 754 precisión simple

N = -6,8876610 x 10-39
1. Expresarlo en binario: -6,8876610 x 10-39  -1,2BFFF9A16 x 2-127 =
= -1,00101011111111111111100110102 x 2-127
2.a. Normalizar: -1,00101011111111111111100110102 x 2-127 está normalizado.
2.b. Redondear al valor más próximo:
-1,00101011111111111111100110102 x 2-127  -1,001010111111111111111012 x 2-127
El exponente queda fuera de rango, por tanto estamos ante un caso especial con
exponente igual a -126 y mantisa desnormalizada:
-0,100101011111111111111100110102x2-126  -0,100101011111111111111102 x 2-126
3. Exponente: 00000000
4. Cálculo de mantisa:
m = 0,10010101111111111111110 (no hay bit implícito)
5. Bit de signo: s = 1 (nº negativo)
6. Representación en precisión simple:
1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
S EXPONENTE MANTISA

7. Representación en notación compacta hexadecimal:


N = 1000 0000 0100 1010 1111 1111 1111 11102,IEEE754,s =
= 804AFFFE16,IEEE754,s
Al realizar la conversión obtenemos un exponente por debajo de -126, con lo cual estamos ante un
caso especial con mantisa desnormalizada.

43
Sistemas de representación en coma flotante
Ejemplo de conversión de base 10 a IEEE 754 precisión simple

N = 4,510 x 10100
1. Expresarlo en binario: 4,510 x 10100  1,492E2CA16 x 2334 =
= 1,010010010010111000101100102 x 2334

Como el exponente es mayor que el mayor exponente permitido, el número no es


representable en IEEE 754 con precisión simple.

En este caso la cantidad es excesivamente grande, y no puede representarse en el estándar IEEE 754
de precisión simple.

44
Sistemas de representación en coma flotante
Operaciones de suma y resta

Inicio • Ejemplo en notación científica: A+B,


con 3 cifras fraccionarias en la mantisa
Alinear las mantisas A = 4,538 · 104 ---- B = 6,471 · 102
1. Alinear mantisas
Sumar/restar las A = 4,538 · 104 ---- B = 0,06471 · 104
mantisas 2. Sumar mantisas
– A+B = (4,538+0,06471) · 104 = 4,60271 · 104
Normalizar la mantisa 3. Normalizar mantisa resultante
resultante Ya está normalizada
4. Redondear mantisa resultante
¿Exponente mayor Sí – A+B = 4,60271 · 104 ≈ 4,603 · 104
que el máximo?

No
Infinito positivo
¿Exponente menor Sí o negativo
que el mínimo?
No
Representar número en
Redondear la forma desnormalizada
mantisa resultante

No ¿Todavía está
normalizada?

Fin

La suma y la resta en coma flotante son operaciones complejas que constan de una serie de etapas:
1. Lo primero es desempaquetar los operandos, dividiéndolos en campos (conjunto signo-
mantisa y exponente). Esta tarea implica añadir el bit implícito al principio de la mantisa.
2. Seguidamente se realiza la alineación de las mantisas, para que ambas cantidades tengan el
mismo exponente, dado que de no hacerlo sería imposible sumarlas o restarlas. Para ello, se toma
la cantidad con menor exponente, y se desplaza su mantisa hacia la derecha tantos lugares como
sea necesario, ajustando el exponente hasta que es igual al de la cantidad con exponente mayor.
Dicho de otro modo, se calcula 𝑘 𝑒𝑥𝑝 𝑒𝑥𝑝 y después se desplaza k lugares a la derecha la
mantisa del número con menor exponente.
3. En este paso se realiza la suma o la resta de las mantisas, según de la operación seleccionada y
los signos de ambas. El exponente del resultado será el exponente mayor de los dos operandos.
4. Después se normaliza la mantisa resultante. En este paso quizá sea preciso ajustar el exponente.
5. Ahora hay que comprobar si el exponente del resultado está dentro del rango permitido. Si es
demasiado grande, el resultado será +∞ ó -∞, dependiendo del signo del resultado. Si es
demasiado pequeño, se produce subdesbordamiento, y entonces será preciso representar el
resultado en forma desnormalizada. En ambos casos, se calculan los campos de signo, exponente
y mantisa, se empaquetan y la operación termina.
6. Si el exponente del resultado está dentro de rango, el siguiente paso consiste en redondear la
mantisa. Esto puede provocar que se desnormalice, con lo cual sería preciso un proceso de
postnormalización, volviendo al paso 4.
7. Para terminar, se empaquetan los campos en el orden requerido, apartando el bit implícito, que no
formará parte de la representación final del resultado.
En la diapositiva se muestra un ejemplo de suma de dos números en notación científica.
45
Sistemas de representación en coma flotante
Ejemplo de suma de dos cantidades dadas en IEEE 754 precisión simple

A = 4C740000 ---- B = 49840017


1. Dividir en campos añadiendo el bit implícito:
A → Ma = +1,111010000000000000000002 ---- Expa = 10011000E127
B → Mb = +1,000010000000000000101112 ---- Expb = 10010011E127
2. Alinear mantisas: Expa - Expb = 5 → desplazar Mb 5 lugares a la derecha
M’b = +0,00001000010000000000000101112
3. Sumar las mantisas:
Mr = Ma + Mb =+1,11110000010000000000000101112 ---- Expr = 10011000E127
4. Normalizar la mantisa resultante: ya está normalizada.
5. Redondear la mantisa resultante al valor más próximo:
Mr = +1,11110000010000000000000101112 (bits de redondeo en cursiva) →
M’r = +1,111100000100000000000012 (bit implícito en negrita).
6. Representación en precisión simple:
0 1 0 0 1 1 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
S EXPONENTE MANTISA

Representación en notación compacta hexadecimal:


R = 0100 1100 0111 1000 0010 0000 0000 00012,IEEE754,s =
= 4C78200116,IEEE754,s

Esta diapositiva muestra un ejemplo de suma de dos números en coma flotante IEEE 754 de precisión
simple. Se observa que B tiene menor exponente que A, con lo cual al alinear las mantisas y sumar
quedan 5 bits sobrantes, que se utilizarán para redondear. El exponente del resultado es el exponente
de A. En el paso de normalización podría haber sido necesario ajustar dicho exponente, pero en este
caso no ha hecho falta.
Al sumar se comete un error absoluto en el resultado que es menor que 2-23+5=2-18, es decir, es
menor que el peso del bit menos significativo de la mantisa multiplicado por el exponente. Como
hemos hecho redondeo al valor más próximo, en realidad el error absoluto es menor que la mitad de
dicho valor, con lo que finalmente ea < 2-17.
Se recomienda convertir A y B a base 10 y sumarlas, y comparar el resultado con R, comprobando los
errores absoluto y relativo cometidos.
En ocasiones se dan circunstancias curiosas, dependiendo del valor comparado de los operandos.
Como ejemplo, se propone realizar la suma de los números X=7F40000016 e Y= 6940000016 , ambos
representados en IEEE 754 de precisión simple con notación compacta hexadecimal, y analizar el
error absoluto y relativo cometidos en tal operación.

46
Sistemas de representación en coma flotante
Operaciones de producto y división

Inicio
A  m a  2expa 
exp b 
 R p  A  B   m a  m b   2expa  expB
Sumar/restar los B  mb  2 
exponentes

A  m a  2expa  A m 
Multiplicar/dividir las
exp b 
 R d    a   2expa expB
mantisas
B  mb  2  B  mb 
Normalizar la mantisa
resultante • Ejemplo en notación científica: A · B,
con 3 cifras fraccionarias en la mantisa

¿Exponente mayor
que el máximo?
A = 4,538 · 104 ---- B = 6,471 · 102
1. Sumar exponentes
No
Infinito positivo Exp’R = 4+2 = 6
¿Exponente menor Sí o negativo 2. Multiplicar mantisas
que el mínimo?
M’R = MA·MB = 4,538 · 6,471 =
No
Representar número en
= 29,365398
Redondear la forma desnormalizada 3. Normalizar mantisa resultante
mantisa resultante
MR = 2,9365398
¿Todavía está
ExpR = 6+1 = 7
No
normalizada? 4. Redondear mantisa del resultado
Sí MR = 2,9365398 ≈ 2,937
5. Resultado
Fin A·B ≈ 2,937 · 107

El producto y la división en coma flotante constan de una serie de etapas:


1. Lo primero es desempaquetar los operandos, dividiéndolos en campos (conjunto signo-
mantisa y exponente). Esta tarea implica añadir el bit implícito al principio de la mantisa.
2. En este paso se suman (en el producto) o se restan (en la división) los exponentes para obtener el
exponente resultante.
3. Seguidamente se realiza el producto o división de las mantisas.
4. Después se normaliza la mantisa resultante. En este paso quizá sea preciso ajustar el exponente.
5. Ahora hay que comprobar si el exponente del resultado está dentro del rango permitido. Si es
demasiado grande, el resultado será +∞ ó -∞, dependiendo del signo del resultado. Si es
demasiado pequeño, entonces será preciso representar el resultado en forma desnormalizada. En
ambos casos, se calculan los campos de signo, exponente y mantisa, se empaquetan y la
operación termina.
6. Si el exponente del resultado está dentro de rango, el siguiente paso consiste en redondear la
mantisa. Esto puede provocar que se desnormalice, con lo cual sería preciso un proceso de
postnormalización, volviendo al paso 4.
7. Para terminar, se empaquetan los campos en el orden requerido, apartando el bit implícito, que no
formará parte de la representación final del resultado.
En la diapositiva se muestra un ejemplo de producto de dos números en notación científica.

47
Índice

1. Introducción.
2. Sistemas de representación numérica.
3. Aritmética binaria.
4. Sistemas de representación en coma fija.
5. Sistemas de representación en coma flotante.
6. Representación de caracteres alfanuméricos.
7. Representación de datos numéricos: texto frente a binario.

48
Representación de caracteres alfanuméricos
Sistemas de representación alfanumérica

• Codificaciones alfanuméricas: sirven para representar caracteres


alfabéticos, numéricos, signos de puntuación y signos de control.
• ASCII: código estándar americano para el intercambio de información
(American Standard Code for Information Interchange).
 Originalmente: US-ASCII de 7 bits.
 Actualmente: ASCII extendido de 8 bits con variaciones nacionales.
 Variación nacional para España y otros países latinos: Latin-1 ó ISO 8859-1.
• Unicode: para intercambio de mensajes multilingüe.
 Primera versión: caracteres de longitud fija de 16 bits.
 UTF-8: codificación de longitud variable con caracteres de 1 a 4 bytes.
 Caracteres de 1 byte: US-ASCII de 7 bits precedidos de un bit a 0.
 Caracteres adicionales de las lenguas romances, griegos, cirílicos, árabes,
hebreos, etc: 2 bytes, el primero comenzando por 110 y el segundo por 10.
 Caracteres chinos, japoneses, coreanos, Braille, etc: 3 bytes, el primero
comenzando en 1110 y los otros dos por 10.
 Caracteres de 4 bytes: su primer byte comienza por 11110, y los otros tres
por 10.
 UTF-16: codificación de longitud variable con 2 ó 4 bytes por carácter.
 UTF-32: caracteres de longitud fija de 32 bits.

Las codificaciones alfanuméricas representan los caracteres alfabéticos, numéricos, signos de


puntuación y signos de control mediante cadenas de dígitos binarios. Al menos deben representar 26
letras del alfabeto y 10 dígitos, es decir 36 caracteres, luego necesitan un mínimo de 6 bits. En
realidad, se necesitan más caracteres, de forma que las codificaciones más utilizadas emplean 7 y 8
bits: ASCII y EBCDIC (Extended BCD Interchange Code).
ASCII, el código alfanumérico más extendido, es el estándar americano para el intercambio de
información (American Standard Code for Information Interchange). El código ASCII original (US-
ASCII) usaba 7 bits para representar 128 caracteres (desde 0000000 hasta 1111111, 7F en
hexadecimal) donde los primeros 32 caracteres son de control (no gráficos o invisibles) y los restantes
son gráficos (visibles). En la actualidad ASCII es un código de 8 bits, también conocido como ASCII
extendido, o ANSI (American National Standards Institute), que aumenta su capacidad hasta 256
caracteres. Los caracteres adicionales van del 80 (1000 0000) hasta el FF (1111 1111) e incluyen
caracteres alfabéticos no ingleses, símbolos no ingleses, letras griegas, símbolos matemáticos,
caracteres para gráficos, caracteres gráficos de barra y caracteres sombreados.
Los códigos ASCII extendidos presentan variaciones nacionales. El código más usado en nuestra zona
geográfica es el Latin-1, denominado también ISO 8859-1.
La familia de códigos para caracteres denominada Unicode originalmente empleaba 16 bits por
carácter. Unicode ha evolucionado hacia otras versiones, varias de las cuales admiten caracteres de
longitud variable, siempre ocupando uno o varios bytes. La más utilizada es UTF-8, que usa entre 1 y
4 bytes por carácter. Con un byte se representan los caracteres del código US-ASCII de 7 bits,
teniendo el bit más significativo a 0. En los caracteres representados con 2 bytes, el primer byte
comienza por 110 y el segundo por 10, y en este grupo se incluyen los caracteres adicionales con
signos diacríticos, el alfabeto griego, el cirílico, el árabe, el hebreo, etc. Con 3 bytes se representan
los caracteres Braille, chinos, japoneses y coreanos, entre otros. Con 4 bytes se representan los
símbolos matemáticos, el alfabeto persa, los ideogramas Han, etc.
49
Representación de caracteres alfanuméricos
Sistemas de representación alfanumérica

La diapositiva muestra una captura de pantalla del editor de textos Notepad++, que soporta múltiples
sistemas de codificación alfanumérica.
El código ANSI hace referencia al ASCII extendido de 8 bits.
Los sistemas BOM (byte ordering mode) permiten utilizar codificaciones con varios bytes por carácter
ordenándolos de diferentes modos. Los sistemas BE (big endian) tienen el byte más significativo
primero, mientras que los LE (little endian) tienen delante el byte menos significativo.
UCS-2 es el sistema Unicode original de longitud fija de 16 bits.

50
Representación de caracteres alfanuméricos
Tabla de caracteres ASCII extendidos ISO 8859-1

Esta es la tabla de caracteres ASCII extendido para variaciones nacionales ISO 8859-1 ó Latin-1. La
mitad superior corresponde con el US-ASCII, y la mitad inferior con la parte extendida. La codificación
de los caracteres se obtiene mediante la suma de la etiqueta de fila más la de columna. En la tabla
estas etiquetas aparecen en hexadecimal y en decimal. Por ejemplo, la codificación del carácter ‘a’ se
obtiene sumando su etiqueta de fila (96 en decimal) con la de columna (1), así que la codificación de
la ‘a’ corresponde con el número 96+1=97. Si miramos las etiquetas hexadecimales, veremos que son
60 y 1 respectivamente, con lo cual la codificación del carácter ‘a’ en hexadecimal es 61, y desde ésta
es más fácil obtener la codificación binaria, que es 01100001. Al espacio en blanco, por su parte, le
corresponde el ordinal decimal 32 (20 hex y 00100000 binario).
Se observa que las codificaciones de las letras del alfabeto minúsculas y sus correspondientes
mayúsculas difieren en un único bit. Lo mismo sucede con la ‘ñ’ (F1 hexadecimal) y la ‘Ñ’ (D1
hexadecimal), que están en la parte extendida, o con ‘?’ (3F hexadecimal) y ‘¿’ (BF hexadecimal), y
con ‘!’ (21 hexadecimal) y ‘¡’ (A1 hexadecimal).
Las cifras del ‘0’ al ‘9’ se corresponden con los códigos hexadecimales del 48 (30 en hexadecimal,
00110000 en binario) al 57 (39 en hexadecimal, 00111001 en binario).
Los caracteres de las dos primeras filas son caracteres de control. Estos caracteres no son
imprimibles, y representan informaciones importantes. Destacaremos el carácter nulo (NUL), cuyo
ordinal es 00000000, y que muchas veces se representa como ‘\0’. También están el salto de línea
(LF), con ordinal 00001010, que aparece a menudo como ‘\n’, o el tabulador horizontal (HT, TAB), de
ordinal 00001001 y que se representa como ‘\t’, el retorno de carro (carriage return, CR), con ordinal
00001101, etc. Otros caracteres de control son el salto de página (FF), el tabulador vertical (VT), el
timbre (BEL), el carácter para activar mayúsculas (SI) y el carácter para desactivarlas (SO), el carácter
de borrado (DEL), el carácter de escape (ESC) y los separadores de fichero (FS), grupo (GS), registro
(RS) y unidad (US), así como otros caracteres utilizados para sincronizar comunicaciones (SOH, STH,
EOT, ENQ, etc).
51
Representación de caracteres alfanuméricos
Representación de cadenas de caracteres

• Los caracteres normalmente van en secuencia formando cadenas o


tiras (strings).
• Longitud de una cadena de caracteres:
 A veces se conoce de antemano (necesario dato entero adicional).
 Lenguaje C: ASCII con carácter nulo (NUL, ‘\0’) delimitador de fin de cadena.
• Ejemplos de cadenas ASCII Latin-1 delimitadas por el carácter nulo:
“Peña”
Caracteres ‘P’ ‘e’ ‘ñ’ ‘a’ ‘\0’
Hexadecimal 5016 6516 F116 6116 0016
Binario 01010000 01100101 11110001 01100001 00000000

“1058”
Caracteres ‘1’ ‘0’ ‘5’ ‘8’ ‘\0’
Hexadecimal 3116 3016 3516 3816 0016
Binario 00110001 00110000 00110101 00111000 00000000

A menudo los caracteres no aparecen solos, sino que forman parte de tiras o cadenas de caracteres
(strings). Un string está compuesto por una secuencia de caracteres almacenados en memoria en
orden uno detrás de otro. Los strings tienen longitud variable. Para saber dónde termina un string hay
dos posibilidades:
• Usar un dato entero adicional para indicar cuál es la longitud del string. Así, sabremos dónde
termina el string sin más que sumar dicha longitud a la dirección donde se encuentra su
primer carácter.
• Colocar un carácter delimitador al final del string. En lenguaje C, todos los strings constantes
y variables almacenados en memoria terminan por el carácter nulo ‘\0’ (cuyo ordinal es
precisamente el 0). En tal caso, la longitud de un string no es conocida, y para calcularla
será preciso contar todos los caracteres que tiene antes de llegar al nulo.

52
Representación de caracteres alfanuméricos
Ficheros de texto (I)

• Los ficheros de texto contienen bytes que se presentan en pantalla o


impresora como caracteres alfanuméricos.
 Caracteres de control para marcar finales de línea, tabulaciones, etc.

Los ficheros de texto contienen datos codificados según un sistema de representación para
información alfanumérica, incluyendo caracteres especiales no imprimibles de tabulación, salto de
línea, retorno de carro, etc.
Cuando se presenta en pantalla el contenido de un fichero de texto, los datos son interpretados
mediante la tabla de códigos que le corresponde (ASCII extendido, UTF-8 u otro diferente), y se
muestran como caracteres alfanuméricos.

53
Representación de caracteres alfanuméricos
Ficheros de texto (II)

• Los caracteres se almacenan internamente en memoria o en disco


mediante combinaciones de bits de acuerdo con el código utilizado.

La diapositiva presenta una captura de pantalla del editor hexadecimal de ficheros HxD. En la parte
derecha puede verse el contenido del fichero de texto en formato alfanumérico, y la parte central de
la imagen muestra los caracteres codificados en hexadecimal: dos dígitos hexadecimales forman un
byte (8 bits), y representan la codificación binaria de cada carácter según el código ANSI.

54
Índice

1. Introducción.
2. Sistemas de representación numérica.
3. Aritmética binaria.
4. Sistemas de representación en coma fija.
5. Sistemas de representación en coma flotante.
6. Representación de caracteres alfanuméricos.
7. Representación de datos numéricos: texto frente a binario.

55
Datos numéricos: texto frente a binario
Representación de datos numéricos en modo texto

• Datos numéricos en modo texto:


 Representados mediante un string.
 Un carácter por dígito, quizá más el signo, la
coma decimal y el indicador y el signo del
exponente.
 Se almacenan en memoria o disco según un
código de representación alfanumérica.
 Al presentarlos en pantalla o impresora se
interpretan como caracteres alfanuméricos y
son legibles para los humanos.

En la figura de la parte superior izquierda de la diapositiva se muestra la representación alfanumérica


de varios datos numéricos, ya traducidos sus códigos a los correspondientes caracteres numéricos.
En el centro de la figura de la parte inferior se puede distinguir la codificación hexadecimal de los
caracteres numéricos. Según la tabla de conversión ISO 8859-1, los dígitos tienen códigos que
comienzan por el 30 (hex) y terminan por el 39 (hex). Podemos ver que hay códigos en otros rangos
que representan el espacio en blanco, el salto de línea, el retorno de carro, el signo, la coma decimal
(que es un punto en el sistema de numeración anglosajón) y el indicador de exponente (e).
Los datos numéricos representados en modo texto son fácilmente interpretados por los humanos,
dado que lo que vemos son números arábigos, que para nosotros son fáciles de comprender. Sin
embargo, el computador no puede realizar operaciones aritméticas con datos numéricos
representados de esta forma, ya que los bytes utilizados en la representación corresponden con
ordinales de códigos y no con los valores numéricos reales de dichos datos, y soslayar esto haría
necesario realizar correcciones sobre los resultados que consumirían tiempo de cómputo.
La diapositiva siguiente muestra la representación binaria de los mismos datos. Cuando el computador
quiere operar con datos numéricos, los almacena internamente en binario, y su representación
depende del tipo de dato de que se trate. Estas representaciones son las únicas que comprenden los
circuitos aritméticos del computador.
Los números enteros sin signo se representan en binario puro. El rango de los mismos va de 0 hasta
2n-1, siendo n el número de bits utilizados en la codificación. Todos los datos en binario puro dentro
de ese rango ocupan el mismo espacio (n bits), independientemente de que su valor sea próximo o
lejano al 0. Los datos que estén fuera de ese rango no serán representables.
(CONTINÚA EN LA PÁGINA SIGUIENTE)

56
Datos numéricos: texto frente a binario
Representación de datos numéricos en binario

• Datos numéricos en binario: representación interna del dato en crudo /


longitud fija / no legibles por los humanos / legibles para la circuitería
del computador, en concreto para sus operadores aritméticos.
 Enteros sin signo: binario puro.
 Enteros con signo: complemento a 2 (positivos y negativos).
 Coma flotante: IEEE 754 de precisión simple o doble.

(VIENE DE LA PÁGINA ANTERIOR)


Los números enteros con signo (que pueden ser positivos o negativos) se representan en
complemento a 2. Con n bits el rango iría desde -2n-1 hasta 2n-1-1, y todos los datos dentro de este
rango ocupan el mismo espacio (n bits), independientemente de que su valor absoluto sea grande o
pequeño. Los datos que estén fuera de dicho rango no serán representables.
Los datos en notación científica se representan mediante el estándar IEEE 754 de precisión simple o
doble. Los datos representados en el sistema IEEE 754 de precisión simple ocupan 32 bits,
independientemente de cuál sea su valor absoluto. También tienen tamaño fijo los datos
representados en IEEE 754 de precisión doble (64 bits).
La diapositiva muestra un ejemplo con dos datos enteros de 32 bits representados en complemento a
2, más uno en coma flotante de precisión simple. No hace falta colocar delimitadores ni separadores
entre dos datos consecutivos, ya que el tamaño que ocupan en memoria (y en fichero binario) es fijo
y conocido.
En la parte izquierda de la figura se muestra la representación binaria de los datos (compactada en
hexadecimal) tal cual aparecería en memoria y en el fichero binario.
En la parte central se intenta presentar una traducción de los datos a ISO 8859-1, pero, como puede
verse, se muestran símbolos que no tienen que ver con su representación alfanumérica. Para tener
dicha representación alfanumérica sería preciso realizar una conversión de binario a decimal,
respetando en cada caso las características de los sistemas de complemento a 2 e IEEE 754 precisión
simple.
A la derecha de la figura se muestran varias representaciones alfanuméricas para los datos del
fichero, según las reglas de distintos sistemas de representación. Es evidente que una cierta
combinación de bits no tiene ningún significado concreto si no sabemos cuál es el sistema
de codificación en el que se encuentra representada.
57
Datos numéricos: texto frente a binario
Comparación

Dato Representación
ISO 8859-1: 31 32 39 30 38 (hex.)
00110001 00110010 00111001 00110000 00111000
12908
Complemento a 2: 0000326C (hex.)
00000000000000000011001001101100

Dato Representación
ISO 8859-1: 2D 32 34 37 36 31 (hex.)
00101101 00110010 00110100 00110111 00110110 00110001
-24761
Complemento a 2: FFFF9F47 (hex.)
11111111111111111001111101000111

Dato Representación
ISO 8859-1: 39 2E 33 35 65 2B 32 (hex.)
00111001 00101110 00110011 00110101 01100101 00101011 00110010
9.35e+2
IEEE 754 de precisión simple: 4469C000 (hex.)
01000100011010011100000000000000

Esta diapositiva muestra las representaciones alfanumérica y binaria de los datos utilizados en los
ejemplos anteriores.
Al representar un dato numérico mediante un código alfanumérico, el número de bytes que ocupa
depende de los caracteres utilizados para representarlo (dígitos, signos, coma fraccionaria, indicador
de exponente). La representación alfanumérica de datos numéricos es adecuada para que los
humanos podamos leerlos. Sin embargo, no sirve para realizar cálculos, dado que los circuitos de
cómputo de operaciones aritméticas no están diseñados para soportar este formato.
Los datos numéricos representados en binario puro, complemento a 2 y coma flotante tienen tamaño
fijo, independientemente del valor que estén representando. Por tanto, estas representaciones
requieren menos espacio de memoria para los datos. Además, están soportadas por los circuitos
aritméticos del computador, permitiendo altas velocidades de cómputo. Entonces, cuando el
computador almacena un dato numérico en memoria o lo copia en un registro, utiliza siempre un
sistema numérico binario de representación.
Al introducir un dato numérico en el computador, las rutinas de entrada desde teclado o desde fichero
de texto lo reciben en formato alfanumérico, como una tira de caracteres. Estas rutinas realizan la
conversión de la representación alfanumérica a la representación binaria antes de almacenarlo como
un dato numérico en memoria. La conversión en sentido inverso (de binario a alfanumérico) sólo se
efectuará cuando haya que presentar datos por pantalla o haya que grabarlos en un fichero de texto.
Entre medias, todos los cálculos efectuados con el dato se realizan utilizando su representación en
binario puro, complemento a 2 ó IEEE 754 de precisión simple o doble, según proceda.
Al leer datos numéricos desde un fichero binario, no es preciso realizar conversión alguna antes de
grabarlos en memoria, pues la representación de los datos binarios en fichero y memoria es idéntica.
Igual sucede en las escrituras en ficheros binarios: los datos se graban directamente en el fichero
utilizando su representación en binario puro, complemento a 2 o coma flotante, sin realizar ninguna
traducción y ocupando cada dato un espacio fijo de almacenamiento.
58

También podría gustarte