• No se han encontrado resultados

Notación en exceso

Otro método para representar valores enteros es la notación en exceso. Como sucede con la notación en complemento a dos, cada uno de los valores de un sistema de notación en exceso se representa mediante un patrón de bits de la misma longitud. Para establecer un sistema en exceso, primero seleccionamos la longitud del patrón que deseamos utilizar y luego escribimos todos los dife- rentes patrones de bits de dicha longitud en el orden que aparecerían si estu- viéramos contando en binario. A continuación, observamos que el primer patrón con un 1 como el bit más significativo aparece aproximadamente en mitad de la lista. Seleccionaremos este patrón para representar el cero; los siguientes patrones se emplean para representar 1, 2, 3,...; y los patrones que le anteceden se utilizan para ⫺1, ⫺2, ⫺3,... El código resultante, cuando se emplean patrones de longitud igual a cuatro, se muestra en la Figura 1.24. En

Patrón de bits

Valor representado

Cuestiones y ejercicios

1. Convierta cada una de las siguientes representaciones en complemento a dos a su forma equivalente en base diez:

a. 00011 b. 01111 c. 11100

d. 11010 e. 00000 f. 10000

2. Convierta cada una de las siguientes representaciones en base diez a su forma equivalente en complemento a dos utilizando patrones de 8 bits:

a. 6 b. ⫺6 c. ⫺17

d. 13 e. ⫺1 f. 0

61 1.6 Almacenamiento de enteros

ella podemos ver que el valor 5 está representado por el patrón 1101 y el valor ⫺5 está representado por 0011. (Observe que la diferencia entre un sistema en exceso y un sistema en complemento a dos es que los bits de signo están inver- tidos.)

El sistema representado en la Figura 1.24 se conoce con el nombre de nota- ción exceso ocho. Para entender por qué, interpretamos primero cada uno de los patrones que forman el código utilizando el sistema binario tradicional y luego comparamos dichos resultados con los valores representados en la nota- ción en exceso. En cado caso, veremos que la interpretación binaria es ocho unidades superior a la interpretación con notación en exceso, Por ejemplo, el patrón 1100 en notación binaria representa el valor 12, pero en nuestro sistema en exceso representa el valor 4; 0000 en notación binaria representa 0, pero en el sistema en exceso representa el valor ⫺8. De forma similar, un sistema en exceso basado en patrones de longitud cinco se denominaría notación exceso 16, porque el patrón 10000, por ejemplo, se emplearía para representar el cero en lugar de representar el valor usual de 16. De la misma forma, puede com- probar que el sistema en exceso de tres bits se podría denominar notación exceso cuatro (Figura 1.25).

Patrón de bits

Valor representado

3. Suponga que los siguientes patrones de bits representan valores almace- nados en complemento a dos. Determine la representación en comple- mento a dos del negado de cada uno de esos valores:

a. 00000001 b. 01010101 c. 11111100

d. 11111110 e. 00000000 f. 01111111

4. Suponga que una máquina almacena números en notación en comple- mento a dos. ¿Cuáles son los números más grande y más pequeño que pueden almacenarse si la máquina utiliza patrones de bits de las siguien- tes longitudes?

a. cuatro b. seis c. ocho

5. En los siguientes problemas, cada patrón de bits representa un valor almacenado con notación en complemento a dos. Calcule la respuesta a cada problema con notación en complemento a dos realizando el pro- ceso de suma descrito en el texto. Después compruebe los resultados tra- duciendo el problema y la respuesta a notación en base diez.

a. 0101 b. 0011 c. 0101 d. 1110 e. 1010

⫹ 0010 ⫹ 0001 ⫹ 1010 ⫹ 0011 ⫹ 1110

6. Resuelva cada uno de los problemas siguientes en notación en comple- mento a dos, pero en esta ocasión fíjese si se producen desbordamientos e indique qué respuestas son incorrectas debido a dicho fenómeno.

a. 0100 b. 0101 c. 1010 d. 1010 e. 0111

⫹ 0011 ⫹ 0110 ⫹ 1010 ⫹ 0111 ⫹ 0001

7. Traduzca cada uno de los siguientes problemas de notación en base diez a notación en complemento a dos utilizando patrones de bits de longitud cuatro, a continuación convierta cada problema a un problema de suma equivalente (como lo haría una máquina) y realice la suma. Compruebe sus respuestas convirtiéndolas de nuevo a base diez.

a. 6 b. 3 c. 4 d. 2 e. 1

⫺(⫺1) ⫺2 ⫺6 ⫺(⫺4) ⫺5

8. ¿Puede producirse desbordamiento al sumar valores en notación de com- plemento a dos, siendo uno de los valores positivo y el otro negativo? Explique su respuesta.

9. Convierta cada una de las siguientes representaciones exceso ocho a su forma equivalente en base diez, sin consultar la tabla incluida en el texto:

a. 1110 b. 0111 c. 1000 d. 0010 e. 0000 f. 1001

10. Convierta cada una de las siguientes representaciones en base diez a su forma equivalente exceso ocho, sin consultar la tabla incluida en el texto:

a. 5 b. ⫺5 c. 3 d.0 e. 7 f.⫺8

11. ¿Puede representarse el valor 9 en notación exceso ocho? ¿Y se puede puede representar el valor 6 en notación exceso cuatro? Explique su res- puesta.

63 1.7 Almacenamiento de números fraccionarios

1.7

Almacenamiento de números fraccionarios

Por contraste con el almacenamiento de enteros, el almacenamiento de un valor con parte fraccionaria requiere que almacenemos no solo el patrón de 0s y 1s correspondiente a su representación binaria, sino también la posición del punto de separación. Una forma muy popular de hacer esto está basada en la notación científica y se conoce como notación en punto (o coma) flotante.

Notación en punto flotante

Expliquemos la notación en punto flotante utilizando solo un byte de almace- namiento. Aunque normalmente las máquinas utilizan patrones mucho más largos, este formato de 8 bits es representativo de los sistemas reales y sirve para demostrar los conceptos importantes sin el engorro de emplear largos patrones de bits.

En primer lugar, designamos el bit de mayor peso de ese byte como bit de signo. De nuevo, un 0 en el bit de signo indicará que el valor almacenado es no negativo, mientras que un 1 indicará que el valor es negativo. A continuación, dividimos los restantes 7 bits del byte en dos grupos o campos: el campo de exponente y el campo de mantisa. Designaremos los 3 bits situados a conti- nuación del bit de signo como el campo de exponente y los restantes 4 bits como el campo de mantisa. La Figura 1.26 ilustra cómo está dividido el byte.

Podemos explicar el significado de los campos considerando el siguiente ejemplo. Suponga un byte compuesto por el patrón de bits 01101011. Analizando este patrón con el formato precedente, vemos que el bit de signo es 0, el exponente es 110 y la mantisa es 1011. Para decodificar el byte, primero extraemos la mantisa y colocamos un punto raíz a su izquierda, obteniendo

.1011

A continuación, extraemos el contenido del campo de exponente (110) y lo interpretamos como un entero almacenado utilizando el método de notación en exceso de 3 bits (consulte de nuevo la Figura 1.25). De ese modo, el patrón en el campo de exponente de nuestro ejemplo representa un valor 2 positivo. Esto nos indica que debemos mover el punto raíz de nuestra solución hacia la derecha un total de 2 posiciones. (Un exponente negativo indicaría que hay que mover el punto raíz hacia la izquierda.) En consecuencia, obtenemos

10.11

que es la representación binaria de 23

4. A continuación, observamos que el bit

de signo de nuestro ejemplo es 0; el valor representado es por tanto negativo.

Bit de signo Exponente Mantisa Posiciones de bit — — — — — — — —

Con ello concluimos que el 01101011 representa el valor 23

4. Si el patrón

hubiera sido 11101011 (que es el mismo que antes excepto por el bit de signo), el valor representado habría sido ⫺23

4.

Veamos otro ejemplo. Considere el byte 00111100. Extraemos la mantisa para obtener

.1100

y movemos el punto raíz un bit hacia la izquierda, ya que el campo de expo- nente (011) representa el valor ⫺1. Con ello tenemos

.01100

que representa el valor 3

8. Dado que el bit de signo del patrón original es 0, el

valor almacenado será positivo. Con ello, concluimos que el patrón 00111100 representa el valor 3

8.

Para almacenar un valor utilizando notación en punto flotante, invertimos el procedimiento anterior. Por ejemplo, para codificar el valor 11

8, primero lo

expresamos en notación binaria y obtenemos 1.001. A continuación, copiamos el patrón de bits en el campo de mantisa de izquierda a derecha, comenzando con el 1 situado más a la izquierda en la representación binaria. Llegados a este punto, el byte tendrá el siguiente aspecto:

1 0 0 1

Ahora deberemos rellenar el campo de exponente. Para ello, nos imagina- mos el contenido del campo de mantisa con un punto raíz situado a su izquierda y determinamos el número de bits que habrá que mover el punto raíz, y la direc- ción en que habrá que desplazarlo para obtener el número binario original. En nuestro ejemplo, vemos que el punto raíz en .1001 tiene que moverse 1 bit hacia la derecha para obtener 1.001. Por tanto, el exponente debe ser un uno positivo, por lo que colocaremos los bits 101 (que es un uno positivo en notación exceso cuatro, como se muestra en la Figura 1.25) en el campo de exponente. Final- mente, rellenamos el bit de signo con el valor 0 porque el valor que estamos almacenando es no negativo. El byte terminado tendrá el siguiente aspecto:

0 1 0 1 1 0 0 1

Hay un aspecto sutil que es posible que se le haya pasado por alto al rellenar el campo de mantisa. La regla consiste en copiar el patrón de bits que aparece en la representación binaria de izquierda a derecha, comenzando por el 1 situado más a la izquierda. Para clarificar el proceso, vamos a considerar el proceso de almacenar el valor 3

8, que es .011 en notación binaria. En este caso, la mantisa

será

1 1 0 0

Y no sería

0 1 1 0

Esto se debe a que debemos rellenar el campo de mantisa comenzando con el 1

situado más a la izquierda que aparece en la representación binaria. Las repre-

sentaciones que cumplen con esta regla se dice que están en forma normali- zada.

65 1.7 Almacenamiento de números fraccionarios

Utilizando la forma normalizada se elimina la posibilidad de que existan múltiples representaciones para un mismo valor. Por ejemplo, tanto 00111100 como 01000110 nos darían, al decodificarlos, el valor 3

8, pero solo el primero de

estos patrones está en forma normalizada. El cumplir con la forma normalizada también implica que la representación para todos los valores distintos de cero tendrá una mantisa que comenzará con 1. Sin embargo, el valor cero es un caso especial; su representación en punto flotante es un patrón de bits compuesto por todo 0s.