universidad tecnica federico santa maria departamento de...

22
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA ELO311 Estructuras de Computadores Prof. Leopoldo Silva Bijit. 19-08-2004 159 9. Números. Un número es un ente que permite representar simbólicamente las veces que la unidad está presente en la cantidad observada o medida. Se estudiarán números representados por una cantidad finita de dígitos o cifras. Un dígito o cifra es un símbolo o carácter que representa a una cantidad entera. Entonces un número es una secuencia de dígitos. En sistemas posicionales y ponderados, la posición que ocupa un dígito, en la secuencia, representa las veces que está presente la potencia de la base numérica correspondiente. Sea b la base numérica y d i un elemento perteneciente al conjunto D b de los dígitos del sistema. D b está formado por b símbolos, con valores consecutivos, en los que está incluido el cero. D b = { 0, 1, 2, ... , (b-1) } d i D b Ejemplos: D 2 = { 0, 1} D 8 = {0, 1, 2, 3, 4, 5, 6, 7} D 10 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} D 16 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} 9.1. Tipos de números. 9.1.1. Números en punto fijo. Coma fija en nuestro país. En punto fijo se asume una determinada cantidad de cifras enteras y fraccionarias, pero la posición de la coma o punto decimal siempre se ubica en el mismo lugar. La representación externa es la secuencia de dígitos siguiente, donde el signo suele ser el símbolo + o -; y se emplea el símbolo coma para separar la parte entera de la fraccionaria: ± d n d n-1 d n-2 ....d 2 d 1 d 0 ,d -1 d -2 d -3 .....d –(m-1) d –m Considerando la siguiente interpretación para el valor del número: in i i i m N db = =−

Upload: others

Post on 27-Apr-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 159

9. Números. Un número es un ente que permite representar simbólicamente las veces que la unidad está presente en la cantidad observada o medida. Se estudiarán números representados por una cantidad finita de dígitos o cifras. Un dígito o cifra es un símbolo o carácter que representa a una cantidad entera. Entonces un número es una secuencia de dígitos. En sistemas posicionales y ponderados, la posición que ocupa un dígito, en la secuencia, representa las veces que está presente la potencia de la base numérica correspondiente. Sea b la base numérica y di un elemento perteneciente al conjunto Db de los dígitos del sistema. Db está formado por b símbolos, con valores consecutivos, en los que está incluido el cero.

Db = { 0, 1, 2, ... , (b-1) } d i ∈ Db

Ejemplos: D 2 = { 0, 1} D 8 = {0, 1, 2, 3, 4, 5, 6, 7} D 10 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} D 16 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}

9.1. Tipos de números.

9.1.1. Números en punto fijo. Coma fija en nuestro país. En punto fijo se asume una determinada cantidad de cifras enteras y fraccionarias, pero la posición de la coma o punto decimal siempre se ubica en el mismo lugar. La representación externa es la secuencia de dígitos siguiente, donde el signo suele ser el símbolo + o -; y se emplea el símbolo coma para separar la parte entera de la fraccionaria:

± d n d n-1 d n-2 ....d 2d 1 d 0 ,d -1 d -2 d -3 .....d –(m-1) d –m Considerando la siguiente interpretación para el valor del número:

i ni

ii m

N d b=

=−

= ±∑

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 160

El rango de la representación aumenta si aumenta n. La precisión del número aumenta si aumenta m. La siguiente es una representación interna en un registro de largo finito de (n + 1 + m) posiciones. La posición del punto es virtual, no se emplea un símbolo para representarlo. Se emplean m cifras para la parte fraccionaria. Se suele emplear un dígito para representar el signo del número.

dn dn-1 dn-2 ... d2 d1 d0 d-1 d-2 d-3 ... d-(m-1) d-m

En la representación interna, que es lo que se deposita en la memoria del computador, sólo se emplean dígitos, y será necesario establecer convenios para representar números con signo. Los bits son bits nada más. Su significado numérico depende de la representación que se emplee.

9.1.2. Aritmética modular. Consideremos algunos conceptos sobre aritmética modular. Si el módulo es bn+1 . Se tienen: bn+1 mod bn+1 = 0

(bn+1 + b-m) mod bn+1 = b –m

En C, el operador mod tiene el símbolo % asociado. Las reglas de asociatividad y distributividad deben ser cuidadosamente aplicadas en una aritmética modular. Ya que, por ejemplo, si ( a + b ) no es representable, entonces: ( a + b ) - c puede ser diferente de a + ( b – c ) . Los números pueden disponerse en un círculo; similar a los números en un reloj, que emplea aritmética módulo 12. Secuencias de dígitos en un sistema módulo bn+1. Se consideran, a continuación, secuencias de dígitos representados en un sistema módulo bn+1, con m cifras fraccionarias y (n+1) cifras para la parte entera. El número bn+1 no es representable. El anterior a éste, sería el mayor representable, y es: (bn+1 - b –m) Con representación: (b-1) (b-1) (b-1) ... (b-1) (b-1) (b-1) (b-1) (b-1) (b-1) ... (b-1) (b-1)

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 161

Sea cero la secuencia formada por todos los dígitos iguales a 0. 0 0 0 ... 0 0 0 0 0 0 ... 0 0

El número más pequeño siguiente a la secuencia cero es: b –m

Con representación: 0 0 0 ... 0 0 0 0 0 0 ... 0 1

El diametralmente opuesto al cero será: (b n+1)/2. Valor que se obtiene dividiendo por dos el máximo. Con representación: b/2 0 0 ... 0 0 0 0 0 0 ... 0 0

Esto se cumple para base par. Las bases de los sistemas númericos que se emplean generalmente son pares. Entonces las secuencias de dígitos, en coma fija y módulo bn+1, podrían representarse ordenados ascendentemente siguiendo el contorno de una circunferencia, según el sentido del reloj: Es importante destacar, que todas las secuencias de dígitos que pueden representarse, en el sistema módulo bn+1, se ubican sobre el círculo, ordenadas según el reloj. Se han destacado aquellas secuencias de dígitos, descritas antes: la del menor y mayor representable, la de cero y la diametralmente opuesta al cero. Los valores que estas secuencias numéricas representan dependen del sistema que se emplee para asociarles valores. Para números de punto fijo, sin signo, con (n+1) cifras enteras y m fraccionarias: la relación de orden, queda establecida por el valor de la suma siguiente:

bn 1+

b m−bb mn −+ −1

2

1bn+

Cero

No es representable

)2

(1

bb mn

−+

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 162

En este caso dn es la cifra más significativa del entero sin signo (unsigned int en el lenguaje C). Como se verá más adelante, las secuencias de dígitos para las distintas representaciones de números con signo, son las mismas que para este caso, sólo difieren las interpretaciones de los valores asociados a las secuencias de dígitos. Los sistemas numéricos empleados son en base dos, enteros con signo y sin signo. Para efectuar operaciones aritméticas, en hardware, se emplea un sumador binario, al cual se le agregan redes combinacionales para ampliar sus capacidades; ya sea para realizar restas, o comparaciones, o para detectar propiedades del resultado. Con la misma unidad aritmética, empleada para enteros, pueden tratarse fraccionarios puros, con y sin signo. Un sumador binario realiza la suma de los operandos de entrada (provenientes de registros o de una palabra de la memoria), ambos de largo l y genera un resultado del mismo largo. De este modo el sumador binario opera con las reglas del álgebra modular. En el resultado, que se define de largo l, no se considera el bit de reserva que genera la última etapa del sumador; esto es así ya que normalmente se desea depositar el resultado en un registro o en una celda de la memoria, que son de largo l. La detección de si el resultado (de largo l) es incorrecto (en caso de tener reserva de salida y operandos interpretados como enteros sin signo) o correcto asumiendo aritmética modular(que se emplea en la aritmética de direcciones) se deja para las redes combinacionales asociadas al sumador.

Ejemplos: a) Con m = 0 , n = 2 y b = 2, podremos representar 8(22+1) secuencias binarias de tres dígitos. La secuencia cero se expresa según 000, el diametralmente opuesto al cero es: 100. El siguiente al cero es: 001; y el anterior es 111.

001000

010

011

111

110

101 100

bd in

miiN ∑

−=

=

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 163

Las secuencias de dígitos binarios quedan separadas en (360/8) grados. Siguiendo el orden del reloj, el sucesor se obtiene sumando uno (en el sumador binario de largo 3) a cualquier número; y el antecesor, restando uno. Puede observarse que la mitad de los números comienzan con cero; la otra mitad con uno. El diametralmente opuesto, se logra sumando 100(en el sumador binario de largo 3). Si se aumenta el largo (de la palabra) en uno se duplica el número de puntos. A medida que el largo aumenta, se tornan más densos los puntos que representan las secuencias de dígitos sobre el círculo; para 32 bits de largo, se tienen más de cuatro mil millones de puntos. Entonces los números pueden visualizarse como puntos sobre la circunferencia. De esta forma la suma de dos números A y B, con resultado S, empleando un sumador binario, puede visualizarse como una suma de ángulos, según reloj, en el círculo. Si debido a las dimensiones de los números A y B, el rayo asociado a S sobrepasa los 360 grados, habrá reserva de salida, y el valor de S será menor que el menor de los operandos. La posición que ocupa S, es correcta, de acuerdo al álgebra modular, ya que si un número sobrepasa al módulo, se le resta el módulo, dejándolo menor que éste. b) Con m=0, n=2 y b=10, la secuencia asociada al cero es 000, su diametralmente opuesta es 500. La mayor representable es 999 y la menor representable es 001. c) Con m=1, n=1 y b=8, la secuencia asociada al cero es 00,0. Su diametralmente opuesta es 40,0; la anterior es 77,7 y la siguiente es 00,1.

A

S

B

A

B

α

β

S

α+β

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 164

9.2. Enteros sin signo. Se emplea m=0. Se asume fija, en la extrema derecha, la posición de la coma decimal:

dn dn-1 dn-2 ... d2 d1 d0 Y se interpreta el valor del número, según:

bd in

iiN ∑

=

=0

El rango de representación es el intervalo: (b n+1 - 1) >= N >= 0 El número bn+1 no es representable. Las operaciones aritméticas con estos números deben proveer alguna indicación cuando ocurra un error de representación. Corresponde al tipo unsigned int en el lenguaje C.

Ejemplos: Con n=2 y b=2. La suma de 111 con 001 no es representable en registro de largo 3. La suma de 111 con 111 puede representarse, en largo 4, según: 1110 La resta de 010 con 100 tampoco es representable en largo 3. El producto de 111 por 111 puede representarse, en registro de largo 6, según: 110001 Con largo de palabra de 32 bits, el mayor número entero representable es: 4.294.967.295, que expresado en hexadecimal es: 0xffffffff Una fracción pura, sin signo puede representarse:

d-1 d-2 d-3 ... d-(m-1) d-m

Una fracción pura, con signo puede representarse:

ds d-1 d-2 ... d-(m-2) d-(m-1) Con ds como bit del signo.

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 165

9.3. Números con signo.

9.3.1. Complemento base. El valor decimal equivalente de la secuencia de dígitos queda dada por: Para números positivos: bd i

n

miiN ∑

−=

= con dn < b/2

Para números negativos:

−−= ∑−=

+ bdb in

mii

nN 1 con dn >= b/2

Se define la representación interna de un número en complemento base, mediante la siguiente expresión, que se evalúa en aritmética módulo bn+1:

bdb in

mii

nCBN ∑

−=

+ −= 1

Notar que para números positivos, la representación es similar a enteros sin signo, excepto que la cifra más significativa debe ser menor que b/2. (cero con b=2). Para números negativos, en forma interna (en el registro), se escribe la secuencia representada por NCB. Entonces la suma de las representaciones internas de un número y su complemento base dan como resultado el módulo. El complemento base de un número es lo que le falta para ser igual al módulo. Nótese que con la interpretación, para los números negativos, la secuencia opuesta diametralmente al cero es el mayor número negativo representable. Los valores asociados a las secuencias de dígitos que representan números con signo, en complemento base, se ilustran en el siguiente diagrama.

b m−bm−−

2

1b n +

0

)2

(1

bb mn

−+

−+

positivo mayor

positivo menor

el más negativo

el menos negativo

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 166

Existe sólo una representación para el cero, y el rango de los positivos y negativos representables es asimétrico. En el círculo, que representa el álgebra modular, la suma de un número y su complemento base es igual al módulo. El complemento base de un número es el simétrico respecto al eje vertical (excepto para el caso del número más negativo). Los números en el primer y cuarto cuadrante trigonométricos son positivos (excepto el más negativo). Los números positivos aumentan según reloj; por lo tanto los negativos disminuyen en contra del reloj, partiendo del menos negativo, que está adyacente al cero. Un número negativo en complemento base se anota, en representación interna:

NN bn −= +1 En general, el complemento base de un número puede anotarse:

)mod()( 11 bb nn NN ++ −= Y puede verificarse que el complemento del complemento de un número es el mismo número (sea positivo o negativo, exceptuando al más negativo que no tiene complemento). La suma de los ángulos asociados, de dos números positivos, que exceda los 180 grados da como resultado un número negativo. La suma de los ángulos asociados, de dos números negativos, que no exceda los (360+180) grados da como resultado un número positivo.

N

θθ

N

N-N

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 167

Las condiciones anteriores permitirán diseñar la red combinacional que detecta rebalse, en números con signo, como se verá más adelante. Para efectuar electrónicamente la resta entre dos números se procede a sumar el primer operando con el complemento base del substraendo.

A - B = A + complemento base de (B) En el diagrama el complemento base de B1 es un número más negativo que A, su ángulo en sentido contra reloj es mayor que el complemento base de A; y el número positivo B2 es menor que A, por lo que tiene menor ángulo que el número positivo A. Entonces (A - B2) resulta positivo; la suma de los ángulos sobrepasa los 360 grados(que corresponde al módulo). Sobrepasar al módulo, implica reserva de salida del sumador, como puede verificarse: A - B2 = A + ( b n+1 – B2) = b n+1 + (A - B2) > b n+1 Dadas las relaciones anteriores, (A – B1) es negativo. La suma de los ángulos no sobrepasa al módulo; el resultado es negativo y no hay reserva de salida. A – B1 = A + (b n+1 –B1) = b n+1 - (B1 – A) = Complemento base de (B1 – A ) < b n+1

A

θθ

AB1

B2

A-A

-B2-B1

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 168

9.3.2. Complemento a dos. Para enteros, con m=0 y base =2 se tiene complemento a dos:

20

in

iid∑

=

Positivos con 0=d n

=N C 2

−− ∑

=

+ 220

1 in

ii

n d Negativos con

1=d n

Y también, modificando los límites de la sumatoria, para números negativos:

21

0

in

iid∑

=

Positivos con 0=d n

=NC2

221

0

in

ii

n d∑−−

=

+ Negativos con

1=d n

dn dn-1 dn-2 ... d2 d1 d0

Para largo de palabra de 32 bits, un número con signo se representa, en forma externa, según:

-d31*231 + d30*230 + d29*229+ .... +d1*21+ d0*20 El mayor positivo, con d31 = 0 y el resto de los dígitos iguales a uno, es: +2.147.483.647 que equivale a 0x7fffffff = 231 – 1 El mayor negativo, con d31 = 1 y el resto de los dígitos iguales a cero, es: - 2.147.483.648 que equivale a 0x80000000 = - 231 El dígito d31 se denomina bit de signo. Los ceros que preceden a un número positivo no tienen significación. Los unos que preceden a un número negativo no tienen significación. Nótese que: NN = = b n+1 – ( b n+1 – N)

Ejemplos: a) Con n=3, +5 se representa internamente según: 0101 -5 se representa internamente según: 1011 Ya que: 10000- 0101 = 1011 Con 2 3+1 = 10000

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 169

Usando la segunda interpretación: 1011 puede interpretarse externamente como: -2 3 + 3 = -5

b) Con n=6, +5 se representa según: 0000101 -5 se representa según: 1111011 Ya que: 2 6+1 - 0000101 = 1111011 Usando la segunda interpretación 1111011 representa al número: -64 + 59 = -5 Nótese que aumentar el largo del registro se rellenan las nuevas posiciones con el bit del signo. Esto se denomina extensión del signo. Las instrucciones que cargan una media palabra o un byte desde la memoria, rellenan con el bit del signo las posiciones más significativas de la palabra (16 en caso de medias palabras y 24 en caso de bytes). c) La operación: 30 –36, calculando en decimal es –6. Puede operarse en complemento a 10. En registro de largo 3, -36 se expresa en complemento a 10, según: Se tiene n=2, entonces: 10 n+1 = 1000. Y por lo tanto: 1000-36=964 El valor +30 es equivalente a 030 en largo 3. Se realiza la resta, mediante sumas: 030 - 036 = 030 + 964 = 994 994 es número negativo, ya que la cifra más significativa es mayor que 5. 994 ≅ -1000 +994 = -6 O también: -(1000-994) = -6 También puede interpretarse como una resta con préstamo (borrow): 30 + (1000 –36) = 1030 –36 = 994 que tiene valor igual a –6. d) Con registro de largo 7 bits(n=6). En este sistema pueden representarse números entre 1000000 (-64 10) y 0111111 (+63 10). Realizar la operación 30 - 36 en binario. Entonces: 3010 = 0011110 3610 = 0100100 y -3610 = 1011100 Realizando la suma binaria: 0011110

1011100 1111010 = -610

9.3.2. Complemento base disminuida. Se interpretan, en forma externa, según:

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 170

bd in

mii∑

−=

Positivos con

2bd n ⟨

=N CBD

−−− ∑

−=

−+

bdbb in

mii

mn)( 1 Negativos con

2bd n ≥

Notar que para números positivos la representación es igual que en complemento base (y que en enteros sin signo); y que la interpretación del valor de los negativos difiere en un término, que es el menor positivo representable: b -m . En representación interna, para números negativos se anota la secuencia asociada a la

cantidad entre paréntesis, es decir: 1( )

i nn m i

ii n

b b d b=

+ −

=−

− − ∑ .

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 171

Los valores asociados a las secuencias de dígitos, que representan números con signo, en complemento base disminuida, se ilustran en el siguiente diagrama. Tiene rango simétrico, y dos representaciones para el valor cero. Lo cual dificulta la realización de comparaciones en hardware.

Complemento a uno. Para enteros, con base dos, se tiene la representación complemento a uno.

20

in

iid∑

=

Positivos con 0=d n

=N C1

−−− ∑

=

+

22(0

1)1 i

n

ii

n

d Negativos con 1=d n

dn dn-1 dn-2 ... d2 d1 d0

Con n=2, +3 se representa según: 011 -3 se representa según: 100 Ya que: 2 n+1 –1 = 111, al restar a este número el positivo 011, resulta 100. Se puede generalizar esta operación, y plantear que para obtener el complemento uno de un número basta efectuar la negación bit a bit, o cambiar los unos por ceros, y los ceros por unos. El complemento del complemento da el número. El c1 de 100 es 011. Observando las definiciones de las representaciones, puede escribirse: NCB = NCBD + b –m

b m−

)2

(1

bb mn

−+

−−

+0

)2

(1

bb mn

−+

−+

-0

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 172

Y también, para enteros, en base dos: NC2 = NC1 + 1

Fórmula con que usualmente se calcula números en complemento a dos. En un círculo que representa enteros, un número en complemento base disminuida está desplazado en la unidad, en contra del reloj, respecto del complemento base. Desde los años 65, del siglo pasado, se emplea representación complemento base para los números enteros con signo. Se exponen otros sistemas de representación de números con signo solamente con fines históricos.

9.3.3. Números polarizados. Se emplea en el exponente de un número en punto flotante. Se desea tener un rango simétrico para los números. Si nos basamos en la representación complemento base deseamos que el número más negativo (que tenga complemento base) sea representado por una secuencia de puros ceros. Para esto a la representación en complemento base se le suma una polarización. Para el caso de enteros, en representación externa:

)12

(1

0

−−+

=∑ bbd

ni

n

ii

Positivos con

2bd n ≥

=N polarizado

enteros )1

2(

1

0

1 −−

−−+

=

+ ∑ bbdbn

in

ii

n

Negativos con

2bd n <

Los valores asociados a las secuencias de dígitos, que representan números con signo, en enteros polarizados en representación interna, se ilustran en los siguientes diagramas.

N

θθ

N∼N

1

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 173

Es similar a complemento base, pero se le suma una polarización de (b n+1)/2 -1, lo cual produce que el máximo número negativo se representa ahora como una secuencia de puros 0s.

dn dn-1 dn-2 ... d2 d1 d0 Se tiene, para base dos: Npolarizado interna = Npolarizado externa + (2 n –1) Con n=7, la polarización es 127. (Se usa en el exponente de flotantes en simple precisión). Con n=10 la polarización es 1023. (Se usa en el exponente de flotantes en doble precisión).

Ejemplo: a) Para n=7. (b n+1)/2 –1 = 128 –1 = 127 =100000002-000000012= 011111112

b) Entonces para un exponente de –1 en representación externa, se tiene:

Ni = Ne +127 = -1 + 127 = 126 = 01111110 2 c) Para Ni = 011010002 = 104 , se tiene Ne= Ni – 127 = 104 –127 = -23 = 111010012

Cero

)12

(1

−−+bn

Más positivo

Más negativo

-1

+1

Polarizado

Cero

Más positivo Más negativo con complemento

-1 +1

Entero complemento

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 174

d) Un resumen con algunos valores. Número con signo Valor externo

C2 C1 Polarizado en +127 Representación interna

-128 10000000 - -127 10000001 10000000 00000000 ... -1 11111111 11111110 01111110 0 00000000 00000000 01111111 +1 00000001 00000001 10000000 .... .... .... ..... +127 01111111 01111111 11111110 Nótese que se cumple: NCB + Polarización = Npolarizado interno Como se verá más adelante la secuencia de ocho unos, se emplea para representar números especiales en punto flotante.

9.3.4. Signo-magnitud

bd in

miiN ∑

−=

=1

Positivos con

0=d n

=N SM ( )N− Negativos con 1=d n

Tiene dos ceros, rango simétrico.

9.3.5. Algunas observaciones sobre números en assembler. Observación a las comparaciones con signo y sin signo.

slti $t2, $zero, 1 # 0<1 deja t2 = 1 slti $t2, $zero, -1 # 0<-1 deja t2 = 0 sltiu $t2, $zero, 1 # 0<1 deja t2 = 1 sltiu $t2, $zero, -1 # 0<0xffff deja t2 = 1 -1 unsigned se interpreta com 0xFFFF en un campo de 16 bits. Para efectuar la comparación el campo de 16 bits se extiende a 32 con extensión de signo.

El campo inmediato de 16 bit, cuando representa números con signo permite escribir números entre: -32.768 = -2 15 y +32.767 = + (2 15 – 1)

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 175

9.4. Relación entre números en base b y base b k. Si b es dos, con k = 3 se tiene número octal, si k = 4 se tiene hexadecimal. Sean dos secuencias de dígitos que representan números equivalentes en base b y base b k. ( ....a3 a2 a1 a0, a-1 a-2 a-3....) b = ( ...A3 A2 A1 A0, A-1 A-2 A-3 ....)b

k

Si los números son equivalentes se cumple, que tienen iguales valores decimales, es decir:

Σ a j b j = Σ A j b kj

Agrupando k cifras del sistema en base b, puede expresarse la primera suma , mediante:

Σ a j b j = Σ ( a kj +k –1 b k-1 +.....+a kj b 0)b kj

Entonces se cumple que cualquier dígito del sistema de base b k, puede representarse según la secuencia de k dígitos en base b:

A j = ( a kj +k –1 .....a kj )b Lo que resta es convertir el número en base b, a base b k. Ejemplo: Se tiene un número binario, y su equivalente decimal es: 101000102 = 1*2 7 +0*2 6 + 1*2 5 + 0*2 4 + 0* 2 3 + 0*2 2 +1*2 1 +0*2 0

Se forman grupos de 4 cifras: = (1*2 3 +0*2 2 + 1*2 1 + 0*2 0 ) 2 4*1 + (0* 2 3 + 0*2 2 +1*2 1 +0*2 0 ) 2 4*0

Se representan los grupos entre paréntesis por número binarios: = (1010) 2 2 4*1 + (0010) 2 2 4*0 Los números binarios se expresan en hexadecimal: = (A 16) 2 4*1 + (216

) 2 4*0 = (A 16) 161 + (216 ) 160 = A2 16

Entonces para convertir un número en base b a base bk, basta leer en hexadecimal cada grupo de cuatro cifras binarias. La conversión de hexadecimal a binario consiste en reemplazar cada cifra hexadecimal por el grupo equivalente de cuatro cifras binarias. Esto permite leer o escribir de manera compacta una larga secuencia binaria. Las conversiones de binario a octal, y viceversa se realizan de manera similar.

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 176

Para esto puede usarse la tabla:

9.5. Conversión de números decimales a binarios. La representación de los números en forma externa al computador son secuencias de cifras decimales; pero los computadores almacenan y operan con números representados por secuencias de cifras binarias. La conversión entre estas dos representaciones es un proceso frecuente, al ingresar datos (debe convertirse a binario el número decimal) y al emitir resultados(debe convertirse el número binario a una secuencia decimal equivalente). Con más detalle, la representación externa es una secuencia de caracteres ASCII, donde cada número decimal se representa por un byte. Los cuatro bits menos significativos son la representación binaria del dígito decimal. Se desea desarrollar un algoritmo para efectuar la conversión, pero con las operaciones en binario, para que pueda ser desarrollado por un procesador. Sean dos secuencias de dígitos que representan números equivalentes en base 2 y base 10. ( ....a3 a2 a1 a0, a-1 a-2 a-3....)2 = ( ...A3 A2 A1 A0, A-1 A-2 A-3 ....)10

Si los números son equivalentes se cumple que tienen iguales valores decimales, es decir: Σ a j 2 j = Σ A j 10 j

Si se reemplazan las cifras decimales por sus equivalentes binarios, se tendrá:

Binario Hexadecimal Octal Binario 0000 0 0 000 0001 1 1 001 0010 2 2 010 0011 3 3 011 0100 4 4 100 0101 5 5 101 0110 6 6 110 0111 7 7 111 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 177

Σ a j b j = Σ ( A j )2 (1010)2j

Donde puede emplearse la siguiente tabla para convertir las cifras decimales a secuencias binarias: Si es una cifra decimal, su equivalente ASCII está entre 0x30 y 0x39. Si al byte que representa la cifra decimal se le resta 0x30, se obtiene la secuencia binaria que lo representa. Si al char que representa la cifra decimal se le resta ‘0’, el char asociado al dígito decimal 0, se obtiene la secuencia binaria del dígito decimal.

Ejemplo. Convertir 98 a binario. 98 = 10012*10102 + 10002 = 10110102 + 10002 = 11000102 Para cinco cifras decimales se tendrá el siguiente equivalente binario: A[4]*(1010)4 + A[3]*(1010)3 + A[2]*(1010)2 + A[1]*(1010)1 + A[0] La suma anterior puede escribirse del modo siguiente: (((A[4]*(1010) + A[3])*(1010) + A[2])*(1010) + A[1])*(1010) + A[0] El algoritmo de conversión, para N cifras decimales, puede plantearse:

for (j=N-1, num=A[j]; j>0; j--) num = num*1010 +A[j-1];

9.5.1. Conversión de secuencias de caracteres a un entero. De representación externa a interna. La función atoi (ASCII to integer) convierte la secuencia de caracteres decimales a un número entero con signo. Efectúa las operaciones en decimal.

Binario Decimal Byte ASCII ASCII Binario 0000 0 0x30 00110000 0001 1 0x31 00110001 0010 2 0x32 00110010 0011 3 0x33 00110011 0100 4 0x34 00110100 0101 5 0x35 00110101 0110 6 0x36 00110101 0111 7 0x37 00110111 1000 8 0x38 00111000 1001 9 0x39 00111001

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 178

El argumento s apunta a un string con la secuencia de dígitos decimales. #define isdigit(c) ( ((unsigned char)(c)>=’0’ ) && ((unsigned char)(c)<=’9’ )) /*macro que determina si la cifra es dígito decimal */ int atoi(register const char * s) {register int a; register unsigned char sign;

while (*s == ' ' || *s == '\t') s++; /* salta espacios y tabs */ a = 0; sign = 0; /* asume signo positivo */

if(*s = = '-') {sign++; s++; } /* si es negativo coloca signo*/ while (isdigit(*s)) a = a*10 + (*s++ - '0'); /* calcula número */ if(sign) return (-a); return (a); } La siguiente rutina en assembler MIPS implementa atoi. #************************************** # v0 =atoi($a0); # #************************************** #Convierte string de cifras decimales en a0 a int en binario en v0. atoi: addiu $sp, $sp,-12 #crea espacio del frame de12 bytes. sw $s0, 0($sp) #salva s0 sw $s1, 4($sp) #salva s1 sw $ra, 8($sp) #salva dirección de retorno # Inicia locales y define temporales. li $s0, 0 # a li $s1, 0 # sign li $t1, ' ' li $t2, '\t' # tabulador 0x09 li $t3,'-' # signo menos li $t4, 0x29 # uno menor que menor cifra decimal li $t5, 0x3a # uno mayor que mayor cifra decimal li $t6, 1 # para comparar con uno li $t7, 10 # base de decimales skpblk:lb $t0, 0($a0) # t0 = *s beq $t0, $t1, isblk # es espacio beq $t0, $t2, isblk # es tab beq $t0, $t3, esneg # es signo menos j isdigit isblk: addiu $a0, $a0,1 j skpblk esneg: li $s1, 1 while: addiu $a0, $a0, 1 # próxima cifra

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 179

lb $t0, 0($a0) # ascii en t0. isdigit: slt $t1, $t0, $t5 # c<0x3a slt $t2, $t4, $t0 # 0x29<c and $t1, $t1, $t2 # ve si es cifra decimal beq $t1, $t6, toint # es dígito bne $s1, $t6, espos sub $v0, $zero, $s0 # v0 = -a j fuera espos: move $v0, $s0 # v0 = +a fuera: lw $s0, 0($sp) #restaura s0 lw $s1, 4($sp) #restaura s1 lw $ra, 8($sp) addiu $sp, $sp, 12 jr $ra #y retorna. toint: addi $t0, $t0, -0x30 # convierte cifra decimal a binario. mult $s0, $t7 # a*10 mflo $t1 add $s0, $t1, $t0 # a = a*10 + A[j-1] j while La función xtoi permite convertir secuencias de caracteres hexadecimales a un entero binario. int xtoi(register const char * s) {char sign, c; unsigned val; sign = 0; val = 0; while(isspace(*s) ) s++; if(*s == '-') {sign++; s++;} else if(*s == '+') s++; while(isxdigit(c = *s++)) {

if(isupper(c) ) c = tolower(c); if(isdigit(c))c -= '0'; else c -= 'a' - 10; val *= 16; val += (unsigned char)c; } if(sign) return (-val); else return (val); }

9.5.2. Conversión de enteros a secuencias de caracteres. De representación interna a externa. La función itoa, convierte un entero, representado internamente en binario, a un string.

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA

ELO311 Estructuras de Computadores

Prof. Leopoldo Silva Bijit. 19-08-2004 180

void itoa(int n, char s[]) { int i=0, sign = 0; if (n < 0) { sign=1; n = -n;} do { s[i++] = n % 10 + ‘0’; } while ( (n /=10) >0 ); if (sign==1) s[i++] = ‘-‘; s[i] = ‘\0’; } Básicamente el algoritmo es el inverso de atoi, debe observarse que se obtienen primero las unidades, luego las decenas, y así sucesivamente; y finalmente el signo menos si el número es positivo. La variable i, al final contiene el largo del string, incluido el signo. El siguiente segmento invierte el orden del string: char c; int j; for ( j=i-1, i=0; i<j; i++,j--) {c= s[i]; s[i]=s[j]; s[j] = c;}