Sunteți pe pagina 1din 18

INFORMÁTICA Representación interna de los datos • 1

TEMA 10: Representación interna de los datos

Esquema:

1.- Introducción

2.- Representación de números naturales

3.- Representación de números enteros

4.- Representación de números reales

5.- Representación de caracteres


Email: Preparadores@arrakis.es • Web: http://www.preparadoresdeoposiciones.com

6.- Representación de imágenes

7.- Representación de sonidos

8.- Conclusiones

9.- Bibliografía

1. INTRODUCCIÓN

Los ordenadores son sistemas electrónicos formados por transistores


cuyas líneas pueden estar en dos estados distintos: activas o inactivas.
Eso significa, que a pesar de que una línea eléctrica puede conducir un
rango en principio continuo de distintos voltajes, los sistemas electróni-
cos de un computador discretizan ese continuo y sólo consideran dos
posibles estados, de forma que únicamente entienden de líneas activas
o inactivas, de líneas encendidas y apagadas, de blancos o negros, en
definitva, de ceros y unos.

Cuando se empieza a estudiar Fundamentos de Computadores, sor-


prende cómo es posible que únicamente con esos ceros y unos, poda-
mos tener utilidades como LaTeX que puede ser utilizado para formatear
un libro, aplicaciones Web para banca electrónica, o simulaciones y jue-
gos que manejan imágenes en tres dimensiones en tiempo real.
El primer paso de abstracción para llegar a la comprensión de la imple-
mentación de estos sistemas pasa por entender los sistemas de repre-
sentación interna de los datos utilizados en el ordenador, es decir, cómo
se aprovechan las cadenas de 0’s y 1’s (bits) para almacenar números,
REV.: 06/05

texto, imágenes o sonidos.

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 2

Este tema presenta algunos de los sistemas de representación utilizados


internamente en los ordenadores. En la primera parte del tema descri-
bimos los sistemas de representación típicos para almacenar tipos bási-
cos como enteros y reales. En la segunda parte, analizaremos la forma
de representar información de más alto nivel, como imágenes y sonidos,
que se basan en almacenar conjuntos de los tipos básicos vistos en la
primera parte.

2. REPRESENTACION DE NÚMEROS NATURALES

La forma usada por los humanos de representar números es el sistema


posicional en base 10, que utiliza 10 dígitos (del 0 al 9) de forma que el
valor real de cada uno de ellos depende de su posición. Los ordenado-
res usan también un sistema posicional pero, dado que manejan única-
mente dos valores (el “cero” y el “uno”), utilizan base dos.
Los dígitos en base 2 se denominan bits (binary digits). Cada uno de
ellos tiene un peso que depende de su posición, y que se va multiplican-
do por 2 al desplazarlos a la izquierda. La siguiente tabla presenta algu-
nos ejemplos de números binarios utilizando un ancho de 8 bits:

128 64 32 16 8 4 2 1 Valor Suma de bits a 1


01011000= 0 1 0 1 1 0 0 0 88 =64 + 16 + 8
10100111= 1 0 1 0 0 1 1 1 167 =128 + 32 + 4 + 2 + 1
00000000= 0 0 0 0 0 0 0 0 0 =0
255 =128 + 64 + 32 + 16 +
11111111= 1 1 1 1 1 1 1 1
8+ 4 + 2 + 1
10000000= 1 0 0 0 0 0 0 0 128 =128
127 =64 + 32 + 16 + 8 + 4 +
01111111= 0 1 1 1 1 1 1 1
2+1

Las operaciones aritméticas habituales (suma, resta, multiplicación y di-


visión) se pueden realizar fácilmente de manera análoga a como se rea-
lizan en base 10. Dado que la suma es una operación totalmente distinta
a la resta, se precisan circuitos o módulos distintos en la circuitería para
poder realizar cada operación.

Un factor importantísimo es el número de bits disponibles para guardar


cada número. Cuando nosotros escribimos números, utilizamos una
cantidad variable de dígitos, dependiendo de su tamaño. Sin embargo,
en la representación interna manejada por los ordenadores, ese ancho
debe estar prefijado de antemano, para poder discernir cuando empieza
un número y cuando termina. En la tabla anterior por ejemplo, hemos
utilizado 8 bits para almacenar todos los ejemplos, aunque algunos de
ellos, como el primero, hubieran requerido menos.
Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 3

El número de bits utilizados para cada número depende de la arquitectu-


ra de la CPU utilizada. En ordenadores antiguos las arquitecturas eran
de 8 o incluso de 4 bits, por lo que el rango de valores almacenables era
[0..255] y [0..15] respectivamente. Posteriormente se introdujeron las ar-
quitecturas de 16 bits. Actualmente un ordenador típico utiliza 32 bits pa-
ra guardar números, pudiendo representar números naturales entre 0 y
algo más de cuatro mil millones (en concreto 232-1 dando 4Gb de com-
binaciones). Existen ya CPUs con arquitecturas de 64 bits orientados al
uso doméstico que serán una realidad en breve.
Cuando se realiza una operación de suma o resta, los circuitos corres-
pondientes deberán asegurarse de que el resultado entre en el rango de
posibles valores representados, para, en caso contrario, indicar de algún
modo el desbordamiento (típicamente con una “bandera” o flag). Por
ejemplo, la suma siguiente en números binarios de anchura tres tiene
desbordamiento:
n=3 1 0 1 Æ 5
+
1 0 0 Æ 4
1 0 0 1 Æ 1
El resultado real tiene necesita un bit auxiliar para poder representarse,
por lo que el valor devuelto por la operación no será el correcto.

3. REPRESENTACIÓN DE NÚMEROS ENTEROS


El estudio de la representación de los números naturales no deja de ser
un estudio de la base 2. Sin embargo, en seguida salta a la vista que los
desbordamientos y, especialmente, la representación de números nega-
tivos, requieren un análisis más exhaustivo.
Cuando nosotros necesitamos escribir un número negativo, hacemos
uso de un carácter adicional que precede al número (el menos, “-”). Sin
embargo en un ámbito en el que únicamente disponemos de ceros y
unos para la representación, no podemos ampliar los símbolos disponi-
bles para representar ese menos.
La solución para poder guardar números negativos consiste en interpre-
tar los bits de forma distinta a la utilizada en los naturales o utilizar un bit
para representar el signo.
En los siguientes subapartados veremos algunas de las alternativas que
se han utilizado, la forma de operar con ellas, sus ventajas e inconve-
nientes.
Para todas ellas asumiremos por comodidad que el número de bits dis-
ponibles para representar el número es ocho (lo que da un rango de
[0..255] para la representación de los naturales del apartado anterior),
aunque hay que tener presente, como se ha dicho antes, que los orde-
nadores actuales utilizan un ancho mucho mayor.

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 4

Dado que en esos ocho bits o doscientas cincuenta y seis combinacio-


nes ahora guardaremos números positivos y negativos, el rango de re-
presentación no será el mismo, sino que variará dependiendo del siste-
ma de representación; en concreto no podremos representar números
tan “grandes” como el 255.
3.1. Magnitud y signo
Es la solución más evidente: consiste en utilizar uno de los bits del nú-
mero, en concreto el bit más significativo (el de la izquierda) para repre-
sentar el signo. Al interpretar el número, se utiliza ese bit para establecer
si es un número positivo o negativo.
-1b 64 32 16 8 4 2 1 Valor Suma de bits a uno
01011000= 0 1 0 1 1 0 0 0 88 =64 + 16 + 8
10100111= 1 0 1 0 0 1 1 1 39 =-1*(32 + 4 + 2 + 1)
00000000= 0 0 0 0 0 0 0 0 0 =0
-127 =-1*(64 + 32 + 16 + 8+ 4
11111111= 1 1 1 1 1 1 1 1
+ 2 + 1)
10000000= 1 0 0 0 0 0 0 0 0 =-1*0
127 =64 + 32 + 16 + 8 + 4 +
01111111= 0 1 1 1 1 1 1 1
2+1
El rango de valores que admite la representación es [-127..+127], o en
general [-(2n-1-1)..2n-1-1] siendo n el número de bits. Hay que destacar
que el número cero tiene dos representaciones posibles, ya que puede
expresarse tanto con “+0” como con “-0”. Esto complicará la implemen-
tación de las operaciones aritméticas, como veremos a continuación.
Además, también hace que se desaproveche una codificación de todas
las posibles, ya que, aunque con 8 bits existen 256 posibles combina-
ciones, este sistema es capaz de almacenar únicamente 255 valores.
La representación magnitud y signo es la más cercana a la forma que
tenemos nosotros de representar los números, ya que el signo positivo
(que normalmente omitimos al escribir) viene representado por el bit de
signo a 0, y el signo negativo por el bit a 1. Sin embargo, a la hora de
realizar una operación como la suma, tiene una serie de inconvenientes.
Aunque no somos conscientes de ello, cuando sumamos debemos
hacer previamente una comparación del signo de ambos sumandos, y a
veces también una comparación de sus valores absolutos. Veamos to-
dos los casos que surgen al realizar la operación S = A + B, con más de-
talle:
1. Si signo(A) = signo(B): Es el caso más fácil. Hay que hacer la suma
total, y conservar el signo:
a. Calcular |S| = |A| + |B| (el cálculo de los valores absolutos de cada
número es inmediato, basta con no considerar el bit de signo)
b. Signo(S) = signo(A) = signo(B)
Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 5

2. Si A es positivo y B es negativo, existen dos alternativas: que el valor


absoluto de A sea mayor o igual que el de B, y en tal caso el resulta-
do será positivo, o que el valor absoluto de A sea menor que el de B,
con lo que saldrá negativo. Este caso requiere una comparación de
dos números naturales de n-1 bits antes de poder proceder al cálculo
del resultado.
a. Si |A| >= |B| Æ |S| = |A| - |B|, Signo(S) = 0 (positivo)
b. Si |A| < |B| Æ |S| = |B| - |A|, Signo(S) = 1 (negativo)
3. Si A es negativo y B es positivo, y dado el carácter conmutativo de la
suma, se puede aplicar el caso anterior, intercambiando los suman-
dos.
Por lo tanto, vemos que para la implementación hardware de la suma
con una representación de magnitud y signo se requiere un circuito de
comparación de signos, otro de comparación de naturales, y otros para
sumar y restar naturales.

3.2. Complemento a 2
El complemento a 2 es una particularización de lo que se llama “com-
plemento a la base”, y trata de evitar los problemas que surgen en mag-
nitud y signo para la implementación hardware de las operaciones arit-
méticas.
Seguimos partiendo de la suposición de que existen n bits para repre-
sentar el número. Esta representación también hace uso del bit más sig-
nificativo para representar el signo (e igual que antes, el 0 indica un nú-
mero positivo, y el 1 un número negativo). Sin embargo, cuando el nú-
mero es negativo, los n-1 bits restantes en vez de expresar en binario el
valor absoluto, expresan el complemento a 2 del número.
En general, el complemento a la base r de un número N es:
CrN = rn – N (siendo n el número de dígitos disponsibles)
Por ejemplo, el complemento a 10 del número 20 con dos dígitos dispo-
nibles es:
C10(20) = 102 – 20 = 80
Y el complemento a 2 del número binario N = 1010, si tenemos cuatro
dígitos para la representación es:
C2(10102)) = 24 - 10102) = 100002) – 10102) = 01102)
En la representación de números con complemento a la base (en parti-
cular en complemento a 2 para binarios), se define el opuesto de un
número N positivo representado con n dígitos en base r como su com-
plemento a la base, es decir, la representación utiliza:
-N = CrN = rn - N
Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 6

Con una representación de n dígitos de ancho, vemos que en general la


suma de cualquier número N y su opuesto da cero:

N + (– N) = N + CrN = N + (rn – N) = 100…02)

El resultado anterior es un uno seguido de n ceros, que son los que


guardaríamos en la representación, con lo cual el resultado es correcto.

Existe un algoritmo sencillo para construir el complemento a 2 de un


número. Consiste en recorrer el número de derecha a izquierda, de for-
ma que se dejan intactos todos los bits hasta encontrar el primer 1 in-
cluido, e ir cambiando a partir de él todos los ceros por unos y viceversa.

Como regla mnemotécnica para la representación en complemento a 2,


podemos decir que el peso del último bit en vez de ser 2n-1 es –2n-1.
Ejemplos de números en complemento a 2 con 8 bits son:

-128 64 32 16 8 4 2 1
Valor Suma de bits a uno
01011000= 0 1 0 1 1 0 0 0
88 =64 + 16 + 8
10100111= 1 0 1 0 0 1 1 1
-89 =-128 + 32 + 4 + 2 + 1
00000000= 0 0 0 0 0 0 0 0 0 =0
-1 =-128 + 64 + 32 + 16 +
11111111= 1 1 1 1 1 1 1 1
8+ 4 + 2 + 1
10000000= 1 0 0 0 0 0 0 0 -128 =-128
127 =64 + 32 + 16 + 8 + 4 +
01111111= 0 1 1 1 1 1 1 1
2+1

El rango de representación es [-128..127] o en general [-2n-1..2n-1-1], lo


que significa que la representación no es simétrica (permite más núme-
ros negativos que positivos); además, la conversión de un número a su
opuesto es costosa, ya que es un proceso eminentemente secuencial, al
contrario que en magnitud y signo en que únicamente hay que cambiar
un bit. Una ventaja del complemento a 2 es que no existen dos repre-
sentaciones para el número cero. Sin embargo, la ventaja principal es la
facilidad de implementación de las operaciones aritméticas.
En [1] aparece un análisis de cómo se realiza la suma, utilizando la defi-
nición de comlemento a la base vista antes, y ejemplos de sumas, y se
deduce que:
1. La suma de números en complemento a 2 puede hacerse utilizando
circuitería normal de suma de números binarios (naturales) puros.
2. Únicamente hay que prestar atención al posible desbordamiento:
cuando los dos sumandos tienen el mismo signo (el bit más significa-
tivo coincide). En particular, se debe comprobar que el signo del re-
sultado final es el mismo que el de los sumandos.

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 7

3.3. Complemento a 1

El complemento a 1 es una particularización de lo que se llama “com-


plemento a la base disminuida”. El complemento a la base disminuida r
se representa como Cr-1 y se define como:
Cr-1N = rn - 1 - N (siendo n el número de dígitos disponsibles)
En base dos, la regla mnemotécnica es considerar que el peso del bit
más significativo es –(2n-1-1). La tabla siguiente presenta algunos ejem-
plos de números en complemento a uno con ocho bits de ancho:
-127 64 32 16 8 4 2 1
Valor Suma de bits a uno
01011000= 0 1 0 1 1 0 0 0
88 =64 + 16 + 8
10100111= 1 0 1 0 0 1 1 1
-88 =-127 + 32 + 4 + 2 + 1
00000000= 0 0 0 0 0 0 0 0 0 =0
0 =-127 + 64 + 32 + 16 +
11111111= 1 1 1 1 1 1 1 1
8+ 4 + 2 + 1
10000000= 1 0 0 0 0 0 0 0 -127 =-127
127 =64 + 32 + 16 + 8 + 4 +
01111111= 0 1 1 1 1 1 1 1
2+1
El rango de representación es [-(2n-1-1).. 2n-1-1] que con 8 bits se traduce
a [-127..127]. Por lo tanto, el rango es simétrico, con la desventaja de
tener dos representaciones distintas para el cero.
El método para convertir un número binario en su complemento a uno
consiste en negar todos y cada uno de sus bits. Esto es una ventaja
frente al complemento a dos, ya que no es una operación secuencial.
Sin embargo, la suma en complemento a 1 es más complicada que la
obtenida con la representación en complemento a 2, pues en algunos
casos requiere sumar 1 al resultado final.

3.4. Exceso a M (o sesgada)

Una peculiaridad de los tres métodos de representación vistos hasta


ahora es que no son continuas con respecto al número que representan.
Es decir, si ordenamos todos los números de menor a mayor, las cifras
binarias obtenidas no siguen un orden lexicográfico. Por ejemplo, tene-
mos que –1 < 1, pero usando magnitud y signo con cuatro bits, “1001”
(representación de –1) no es menor, lexicográficamente hablando, que
“0001” (representación de 1).
La representación en exceso a M consiste en sumarle al número N que
vamos a representar el valor M (normalmente M=2n-1 siendo n el número
de bits disponibles). De esta forma, los números negativos se convierten
en positivos, y no se necesita bit de signo. Simplemente se utiliza la re-
presentación binaria pura.

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 8

Por ejemplo, utilizando 8 bits, tenemos las siguientes representaciones


en exceso a 128:

Decimal Exceso a 128 Binario exceso a 128


-128 -128 + 128 = 0 00000000
-127 -127 + 128 = 1 00000001
-1 -1 + 128 = 127 01111111
0 0 + 128 = 128 10000000
1 1 + 128 = 129 10000001
126 126 + 128 = 254 11111110
127 127 + 128 = 255 11111111

En la tabla anterior, se ve que los números y su representación siguen el


mismo orden.

3.5. BCD

La representación BCD (o Binario Codificado en Decimal), se basa en la


representación en decimal del número. Utiliza bloques de cuatro bits ca-
da uno de ellos representando un dígito decimal. Dado que con cuatro
bits hay 16 combinaciones posibles, se pierden 6.
La codificación de cada dígito depende del tipo de BCD (hay muchos y
muy variados), pero lo normal es representar el valor binario del dígito
utilizando los cuatro bits. Esto genera las codificaciones siguientes:

Dígito decimal Código BCD Dígio decimal Código BCD


0 0000 5 0101
1 0001 6 0110
2 0010 7 0111
3 0011 8 1000
4 0100 9 1001

Las distintas variantes de BCD conceden pesos distintos a cada uno de


los bits binarios, para facilitar la implementación de las operaciones
aritméticas (en especial de qué hacer cuando hay desbordamiento en la
suma de un dígito BCD), o para facilitar la conversión de los códigos al
complemento a 9.
Independientemente de qué código se utilice, existen dos variantes, el
BCD empaquetado y el BCD desempaquetado. El primero de ellos
guarda dos dígitos decimales en un byte, mientras que el segundo guar-
da sólo uno, dejando el nibble alto del byte a cero.

byte BCD byte BCD


BCD BCD Empaquetado 0000 BCD Desempaquetado

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 9

4. REPRESENTACIÓN DE NÚMEROS REALES


Los humanos utilizamos fundamentalmente dos formas de representar
los número reales: la notación tradicional o la científica. De cada una de
ellas se deriva un tipo de representación utilizada en los ordenadores.
4.1. Coma fija
Cuando representamos un real, normalmente usamos un carácter adi-
cional que separa la parte entera de la parte real (la “coma” en 1’5). La
representación en coma fija utiliza la misma idea. Lo que se hace es si-
tuar la coma en una posición fija dentro del vector de bits que represen-
tan el número.
Por ejemplo, podemos usar 8 bits para representar un conjunto de nú-
meros, donde los 5 primeros bits se utilizan para la parte entera, y los 3
restantes para la parte real:
10101’110 = 1*24 + 1*22 + 1*20 + 1*2-1 + 1*2-2 = 21’7510)
01100’001 = 1*23 + 1*22 + 1*2-3 = 12’12510)
Cuando se habla de representación de reales, no es suficiente con dar
un rango igual que hacíamos antes. Es decir, para la representación an-
terior no basta con decir que se pueden representar números entre 0 y
31 (25-1), ya que, por ejemplo, no podemos representar el número
0’0001. Es necesario decir que no podemos representar números mayo-
res o iguales que 32 (25), ni números con más precisión de 0’125 (2-3).
La principal ventaja de la coma fija es que se pueden utilizar los mismos
circuitos hardware para implementar las operaciones que se utilizan con
la representación entera.
Su principal problema es que tienen muy limitada la precisión, y que ésta
es fija para todos los valores.
4.2. Coma flotante
La coma flotante resuelve el problema anterior permitiendo que la posi-
ción de la coma cambie. Se basa en la notación científica:
0’00001 = 1’0 · 10-5
-5432000 = -5’432 · 106
Se llama de coma flotante (en inglés floating point) debido a que la coma
decimal no se halla en una posición fija dentro de la secuencia de bits,
sino que su posición se indica como una potencia de la base.
Los números en coma flotante tienen tres componentes:
- Signo: el signo del número.
- Mantisa: indica la magnitud del número; la mantisa de los números
anteriores es 1’0 y 5’432 respectivamente.
- Exponente: contiene el valor al que está elevada la potencia.

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 10

La notación científica que utilizamos usa el 10 como base de la potencia,


ya que es el número que hace que la coma se mueva de izquierda a de-
recha elevándola a números enteros. Cuando se representa la mantisa
en base 2, se utiliza como base de la potencia el 2.
Podemos observar que la notación científica permite varias representa-
ciones distintas para el mismo número, cambiando el exponente. Así,
3’45·105 = 345·103 = 0’0345·107. Para evitar esta duplicidad, se utiliza
únicamente la representación normalizada, que es aquella que tiene só-
lo un dígito entero en la mantisa.
Aunque la idea intuitiva de la coma flotante es esncilla, la implementa-
ción requiere realizar una serie muy variada de decisiones entre las que
se encuentran la cantidad de bits a utilizar para representar el exponente
o la mantisa, cómo realizar las operaciones o qué hacer con los redon-
deos. Debido a esto, la historia de la informática nos ha dejado desde
los años 40 un sin fin de distintas representaciones implementadas en
cada una de las arquitecturas y modelos de ordenadores, cada una pro-
clamando que tenía el mejor algoritmo de coma flotante jamás visto has-
ta ese momento. En [2] se puede encontrar un análisis histórico detalla-
do al respecto.
No es hasta la década de los 80 cuando se consigue hacer un estándar
de representación, por parte de IEEE, y lo que es más importante, un
estándar de la forma en que deben realizarse las operaciones. Gracias a
esto se garantiza que todos los programas que hacen uso de la coma
flotante responden igual y reciben los mismos resultados independien-
temente de la arquitectura donde se implemente.
El estándar IEEE 754 contempla dos formatos distintos, uno de precisión
simple con un ancho de 32 bits, y otro de precisión doble, con un ancho
de 64 bits. Cada uno de ellos tiene dos formatos ampliados para cálcu-
los intermedios; estos dos formatos están pensados para que, aunque
en memoria ocupen 32 y 64 bits, durante las operaciones aritméticas, el
procesador (o coprocesador) mantenga internamente una representa-
ción con más precisión (de 43 y 79 bits respectivamente), para intentar
que se pierda la menos precisión posible debido a cálculos intermedios.
Independientemente del ancho utilizados, todas las representaciones
utilizan la misma codificación. Existen tres campos distintos:
- Signo: en todos los formatos requiere un único bit, y almacena el sig-
no del número (0 para positivos, 1 para negativos).
- Exponente: se utiliza una codificación exceso a 2n-1-1, siendo n el
número de bits reservados para ese campo. La decisión de utilizar
codificación exceso a M para el exponente en vez de complemento a
2 u otra se tomó pensando en poder hacer comparación de números
reales con los mismos comparadores que los enteros.
Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 11

- Mantisa: se utiliza codificación binaria pura. Hay que hacer notar que,
dado que se utiliza notación normalizada, siempre existirá un único
dígito antes de la coma que marca la separación entre la parte entera
y la real. Y dado que se utiliza base dos, ese único dígito será siem-
pre un 1 (excepto en el caso de representar el número cero que ve-
remos más adelante), por lo que ese bit se hace implícito, y se omite
de la representación.

En la tabla siguiente aparece el rango de los números representables


para los dos formatos que marca el estándar IEEE 754. Se puede ob-
servar que el rango es más amplio que en la representación entera de
los apartados anteriores (pues por ejemplo con un ancho de 32 bits, hay
un rango aproximado de [-3’4·1038..3’4·1038]). Sin embargo, no hay que
perder de vista que el número de codificaciones posibles sigue siendo
232 o 264. La representación en coma flotante amplia el rango a costa de
aumentar el espacio entre números representables, siendo ese espacio
no uniforme (tiene mayor “densidad” cerca del cero).

Precisión Precisión
simple doble
Totales 32 64
Signo 1 1
Bits
Exponente 8 11
Mantisa 23 52
(2-2 )·2127 ≅
-23 -52 1023
2-2 ·2 ≅
Mayor
3’4·1038 1’8·10 308
Positivos
1’0·2-126 ≅ 1’0·2-1022 ≅
Menor
1’2·10-38 1’2·10-308
Rango -1’0·2-126 ≅ -1’0·2-1022 ≅
Mayor
-1’2·10-38 -1’2·10-308
Negativos -(2-2-23·2127) -(2-2-52)·21023
Menor ≅ -3’4·1038 ≅
-1’8·10308

Cuando una operación da como resultado un número demasiado grande


o demasiado pequeño, se utiliza el término inglés overflow (desborda-
miento), que puede ser positivo o negativo. Cuando una operación da un
resultado tan cercano al cero que no es representable (entre el negativo
más grande y el positivo más pequeño de la tabla anterior), se dice que
hay underflow negativo o positivo.

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 12

El estándar IEEE 754 reserva dos valores de exponentes para codifica-


ciones especiales:
- Exponente más grande (codificación binaria 2n-1, valor exceso a M 2n-
1
): cuando la mantisa es cero, representa un valor más allá del over-
flow, es decir ± ∞ . Si la mantisa no es cero, no es un número válido
(conocido como NaN del inglés, Not-a-number), y que se obtiene co-
mo resultado de operaciones inválidas.
- Exponente más pequeño (codificación binaria 0, valor exceso a M -2n-
1
-1: cuando la mantisa es nula representa el valor cero (del que hay
dos representaciones, ±0). Cuando la mantisa es distinta de cero, es-
tamos representando un número desnormalizado, que es un número
sin normalizar cuyo bit implícito se supone que es cero, y cuyo expo-
nente es el exponente más pequeño posible para los números norma-
lizados, es decir –126 para precisión simple y –1022 para precisión
doble.

Para matizar todo lo anterior, la siguiente tabla resume la representación


para el formato de precisión simple.

Exponente Mantisa Representa


-127 (valor binario 0) 0 ±0
-127 (valor binario 0) ≠0 (-1)signo·(0.m23..m1)2·2-126
[-126,127] (valor bina- (-1)signo·(1.m23..m1)2·2 (e8 ..e1 ) − 127
rio [1,254])
128 (valor binario 255) 0 ±∞
128 (valor binario 255) ≠0 NaN

Por último, y lo más importante, el estándar IEEE754 establece también


cómo deben funcionar las operaciones aritméticas, por ejemplo qué
hacer cuando se suman infinitos, cómo redondear el resultado de las
operaciones, etc. En [2] se puede encontrar la descripción de los algo-
ritmos para implementar algunas de las operaciones.

5. REPRESENTACIÓN DE CARACTERES

La representación de los caracteres en el ordenador es en realidad una


abstracción de datos. Realmente la CPU es capaz únicamente de mane-
jar números, por lo que el resto de los datos se deben representar como
símbolos numéricos.
La historia está plagada de diferentes tipos de representaciones con dis-
tintos números de bits. En definitiva se puede pensar en todos ellos co-
mo tablas con correspondencias entre los valores numéricos represen-
tados por los bits y los caracteres a los que representan.

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 13

Podríamos decir que la historia de la representación de caracteres em-


pieza con el código Morse. Realmente esta codificación no es utilizada
internamente por los ordenadores, pero fue la primera vez en la que se
enfrentaron a la representación de caracteres utilizando un sistema bina-
rio.
La representación más conocida es el código ASCII, que utilizaba siete
bits para su representación. Después evolucionó a un ancho de 8 bits,
para permitir almacenar caracteres adicionales, como letras de idiomas
no ingleses o símbolos gráficos. Dada la diversidad de lenguajes y sím-
bolos, las 256 combinaciones posibles en 8 bits no son suficientes para
cubrir todo el rango posible, por lo que surgieron las páginas de códigos,
que, manteniendo los primeros 128 caracteres comunes, modifican el
resto dependiendo del idioma.
Esto hace difícil el intercambio de datos, ya que cada extremo puede es-
tar utilizando páginas de códigos distintas. Para evitar esta confusión,
posteriormente han ido apareciendo otras codificaciones que aglutinan
todas estas páginas de códigos en una única representación, utilizando
un mayor número de bits para cada carácter.
El más conocido es UNICODE que utiliza 16 bits por carácter, asegu-
rando hueco para más de 65000 caracteres distintos. Para facilitar la
compatibilidad, los primeros 128 caracteres de la tabla de UNICODE co-
inciden con los de la tabla ASCII.
El mayor problema de UNICODE es que los idiomas con pocos símbolos
en los que se utiliza únicamente la tabla ASCII original de 7 bits, están
incurriendo en un gasto de memoria de un byte por carácter. Para tratar
de solventar este problema, han surgido codificaciones como UTF-8 que
usan la tabla de códigos de UNICODE, pero que no almacenan los valo-
res numéricos en su representación binaria directa, sino que utilizan un
mecanismo de compresión que hace que el ancho de cada símbolo sea
variable. Esto permite ahorrar memoria, pero dificulta ciertas operacio-
nes sobre cadenas como acceder a la letra anterior a una dada.
Para almacenar cadenas de caracteres en memoria, se agrupan todos
ellos en posiciones consecutivas. Dado que las cadenas tienen una lon-
gitud variable, se necesita un mecanismo que permita saber cuándo
acaba. Existen dos alternativas clásicas:
- Antes del primer carácter de la cadena guardar su longitud: utilizado
en lenguajes como BASIC o algunas implementaciones de Pascal (la
de Borland por ejemplo). Se reserva antes del primer carácter un es-
pacio adicional que contiene un número natural con la longitud o nú-
mero de caracteres válidos de la cadena, por lo que la longitud máxi-
ma viene determinada por el número de bits reservados para ese na-
tural. Su ventaja es que el cálculo de la longitud es inmediato. Si se
utiliza una codificación de caracteres de ancho variable, hay que de-
cidir si el número representa el número de bytes o el de caracteres.
Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 14

En el caso de los lenguajes anteriores, se utilizan códigos ASCII de 8


bits, y ambos valores coinciden.
- Marcar el final de la cadena con un carácter especial: utilizado en
lenguajes como C. Después del último carácter, aparece un carácter
especial que indica al programa que ese es el final de la cadena. En
C ese carácter es el carácter ‘\0’ (número binario 0), mientras que el
API del antiguo MS-DOS entendía el carácter ‘$’. Esta representación
no impone un límite en la longitud de la cadena pero provoca que el
cálculo de su longitud requiera un recorrido secuencial de la misma.

6. REPRESENTACIÓN DE IMÁGENES

Cuando se quiere almacenar una imagen en un ordenador, existen bási-


camente dos aproximaciones distintas: la representación de mapa de
bits y la representación vectorial.
Antes de entrar en cada una de ellas, hay que decir que ambas necesi-
tan expresar de alguna forma los colores de los elementos que contie-
nen. Existen diversas codificaciones posibles que limitan el número de
colores disponibles en una imagen. Por ejemplo, existen representacio-
nes monocromas, que utilizan un único bit para expresar el color, existen
escalas de 256 grises, codificaciones basadas en una paleta de 16 o
256 colores, o representaciones que permiten millones de colores posi-
bles

Dicho esto, las imágenes con mapas de bits se basan dividir la imagen
en una matriz de puntos o píxeles (picture elements) cada uno de ellos
de un color distinto. El número de puntos de ancho y alto determinan la
resolución de la imagen; a mayor resolución más detalle. Los mapas de
bits son la representación más cercana a la forma de funcionamiento de
los monitores actuales. Cuando se hace zoom sobre una imagen repre-
sentada como mapa de bits, se comprueba que los píxeles que al princi-
pio eran inapreciables van ganando en tamaño, haciéndose perfecta-
mente perceptibles.
Los mapas de bits son la representación de imágenes por excelencia en
el campo de la fotografía digital, que consiste en una discretización de
una imagen continua en una matriz de puntos de un tamaño determina-
do y cuyas celdas contienen a su vez una discretización del color en un
conjunto de valores dependientes de la representación elegida.
Los mapas de bits pueden posteriormente guardarse en un sin fin de fi-
cheros distintos, con mayor o menor compresión y mayor o menor so-
porte de los distintos formatos de color. Ejemplos de formatos de fiche-
ros de mapas de bits son BMP, GIF, JPG o PNG.

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 15

Por otro lado, las imágenes vectoriales están representadas por un con-
junto de objetos gráficos independientes que se presentan al espectador
simultáneamente, dando la sensación de unidad. Cada uno de esos ob-
jetos contiene en realidad las instrucciones necesarias para su dibujado,
y son por ejemplo vectores, con un punto inicial y un punto final, seg-
mentos curvos como círculos, elipses, curvas Bézier o splines, o relle-
nos. Dado que estos objetos están definidos matemáticamente, las
ecuaciones describen perfectamente cada ilustración. Es esta cualidad
la que los hace perfectamente escalables.

La representación vectorial es muy adecuada para representar imáge-


nes que después van a aparecer en dispositivos como osciloscopios, o
se han de imprimir en plotters, ya que su forma de dibujado se basa en
el dibujado de líneas. También es recomendable para imágenes cuyo
tamaño final de presentación se desconoce, ya que no pierden calidad al
ser ampliadas. Se puede decir que esta representación no guarda la
imagen como tal, sino las instrucciones para dibujarla.
Las imágenes vectoriales son la representación por excelencia para pla-
nos o en general dibujos lineales. Existen distintos formatos de fichero
para almacenar dibujos vectoriales, como DXF, EPS o SVG.

En un mundo en el que las aplicaciones 3D son una realidad, es obliga-


do también hablar de la forma en que los ordenadores manejan o alma-
cenan las imágenes tridimensionales. Existe cierta analogía con la re-
presentación de ilustraciones 2D, habiendo fundamentalmente dos
aproximaciones.

La primera de ellas está relacionada con los mapas de bits. Se trata de


representar una imagen 3D discretizando el espacio volumétrico en cu-
bos de distintos colores (conocidos como voxels), igual que los mapas
de bits lo hacen con cuadrados. El problema con esta representación es
cómo representar el espacio vacío, ya que si en un voxel no hay nada,
no se puede asociar a ese espacio ningún color, y hay que reservar una
codificación para expresarlo.

Este tipo de almacenamiento es muy utilizado en imágenes médicas; los


scanners para pruebas como los TAC no hacen otra cosa que generar
imágenes bidimensionales de distintas secciones (o “rodajas”) del cuer-
po del paciente, que representan un espacio volumétrico del ancho de
esa sección. También, aunque de una forma un poco distinta, esta re-
presentación era utilizada hace algún tiempo por ciertos juegos para re-
presentar terrenos utilizando.

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 16

Otra alternativa distinta es almacenar la geometría de una escena en


tres dimensiones a base de modelar las superficies que la componen a
base de polígonos (triángulos) o superficies matemáticas (como
NURBS). Esta alternativa sería equivalente a la representación vectorial
de las imágenes 2D, ya que lo que contiene son los datos para que el
programa (motor gráfico) represente la escena 3D. Este tipo de repre-
sentación es el utilizado típicamente en los juegos y simulaciones actua-
les.

7. REPRESENTACIÓN DE SONIDOS

También existen dos filosofías distintas de representar el sonido; si in-


terpretamos los sonidos como señales cuya intensidad cambia con el
tiempo, estaremos usando muestreos de señales y representación de
niveles, mientras que si vemos los sonidos como música y eventos, es-
taremos dentro del mundo MIDI.

La primera aproximación consiste en muestrear o discretizar una señal


contínua que representa el sonido en una serie de muestras (discretas)
separadas por un tiempo constante y cuyos niveles de intensidad tam-
bién se discretizan. La frecuencia de muestreo establece el número de
muestras (o samples) por segundo que son reproducidos, y el número
de distintos niveles de intensidad de cada muestra viene determinado
por el número de bits por sample utilizados. Por poner un ejemplo, la ca-
lidad de un CD utiliza dos canales distintos (para el sonido estéreo), con
44100 muestras por segundo y 16 bits de precisión por muestra. La re-
presentación por muestreo es a los sonidos lo que los mapas de bits es
a las imágenes.
Existen numerosos formatos de fichero que almacenan los sonidos así
representados, cada uno de ellos con distintos niveles de compresión y
calidad. Los más conocidos son WAV, MP3 y OGG.

La otra aproximación para almacenar música no tiene en cuenta la natu-


raleza de los sonidos como una señal, sino la forma de generar esa mú-
sica. En particular, los músicos han utilizado durante siglos las partituras
como medio para indicar cómo una melodía debe ser tocada. Los siste-
mas de representación basados en eventos, almacenan en qué instan-
tes debe tocarse cada una de las notas musicales, indicando su dura-
ción, intensidad y altura. Además, cada una de estas notas lleva asocia-
do qué tipo de instrumento es el que debe reproducirla.

Ésta representación, por lo tanto, debe después transformarse a sonido


(señales acústicas), ya sea por un humano (que toca la partitura alma-
cenada), o por un sintetizador automático. Antiguamente, estos sinteti-

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 17

zadores generaban las señales de cada nota utilizando una función ma-
temática como el seno y el coseno, alterando su frecuencia e intensidad
a voluntad. El resultado era un sonido bastante artificial difícilmente me-
jorable con esa aproximación. Actualmente los sintetizadores utilizan ta-
blas de ondas que contienen las notas reproducidas por instrumentos
reales grabados utilizando la representación por muestreo explicada an-
tes. El sintetizador va eligiendo una u otra grabación dependiendo de lo
que se deba tocar en cada momento. Es por esto que en calidad, nunca
podrá competir la calidad de uno de estos ficheros con una grabación
orquestal de una partitura, pues, aunque se está haciendo mucha inves-
tigación al respecto, detrás de la interpretación de una partitura es tras-
cendental la mano del músico.

El tipo de fichero más representativo de esta aproximación de represen-


tación del sonido es el MIDI, aunque no debemos olvidar los MOD, am-
pliamente utilizados en juegos y las demos durante muchos años.

8. CONCLUSIONES

El tema se divide claramente en dos partes: la representación interna de


los tipos de datos básicos, a saber naturales, enteros, reales y caracte-
res, y una segunda parte con un ligero esbozo de la representación de
datos más abstractos como imágenes y sonidos.

Una vez que se sube al nivel de programación usando lenguajes de alto


nivel, parece que la representación interna de los datos vistos en la pri-
mera parte del tema pierde importancia, ya que todos esos datos son
gestionados internamente por el compilador y en último extremo la CPU.
Sin embargo, es necesario conocer cuales son los límites de esos tipos
de datos, cuales son sus rangos y cómo reaccionan ante operaciones
como redondeos, aunque sólo sea para tener la certeza de que los valo-
res que se quieren almacenar entran dentro del rango de la representa-
ción. Hay numerosos ejemplos de grandes pérdidas de dinero por pro-
yectos fallidos debido a infravalorar la importancia de este hecho y que
para los medios de comunicación quedan ocultos bajo la típica frase
“explosión debida a un fallo software”.

Por otra parte, el conocimiento de las filosofías de representación tanto


de imágenes como de sonidos es importante a la hora de decidirnos por
unos tipos de representaciones u otras, y para entender por qué un fi-
chero MIDI ocupa tan poco conteniendo tantos minutos de música, pero
nunca se podrá hacer un conversor general de WAV a MIDI.

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32
INFORMÁTICA Representación interna de los datos • 18

9. BIBLIOGRAFÍA

[1] “Fundamentos de Computadores”. Román Hermida, Ana Mª del Co-


rral, Enric Pastor, Fermin Sánchez.
[2] “Estructura y diseño de Computadores”. David A. Patterson, John L.
Hennessy, volumen 1.
[3] http://es.wikipedia.org/wiki/Coma_fija
[4] “Aritmética en coma flotante”. Daniel Mozos, Alfredo Bautista Palo-
ma. Transparencias de la asignatura “Ampliación de Estructura de
Computadores”. En
http://www.fdi.ucm.es/profesor/mozos/AEC/aritm_pf.PDF
[5] “Computer Graphics: principles and practice in C”. James D. Foley,
Email: Preparadores@arrakis.es • Web: http://www.preparadoresdeoposiciones.com

Andries van Dam, Steven K. Feiner, John F. Hughes. Addison-


Wesley Professional.
REV.: 06/05

Preparadores de Oposiciones para la Enseñanza c/ Génova, 7 – 2º - Izda • 28004 Madrid Tel. 91 308 00 32

S-ar putea să vă placă și