5.5 Aritmética complemento a una base.


Muchas computadoras digitales utilizan un sistema numérico de complemento a base a fin de minimizar la cantidad de circuitos necesarios para realizarla aritmética de enteros.

Por ejemplo, se puede realizar la operación A - B calculando A + (- B) donde (- B) está representado por el complemento a 2 de B. Por tanto, la computadora sólo necesita un sumador binario y algunos circuitos complementarios para la suma y la resta.

Las máquinas que utilizan el sistema numérico de complemento a 2 pueden representar enteros en el intervalo –2n-1 £ N £ 2n-1-1, donde n es el número de bits disponibles para representar a N.

Observe que 2n-1-1=(0,11...1)2ms y que –2n-1=(1,00...0)2ms, donde el bit extremo representa el signo y los n-1 bits restantes representan la magnitud.

Se considerarán tres casos para ilustrar la aritmética en el sistema numérico de complemento a dos: A=B+C, A=B-C y A=-B-C. Se describirá cada caso en general y para todos los casos se supondrá que B³ 0 y C³ 0. Los resultados se pueden generalizar fácilmente, si B y C son negativos.

Caso 1:

Calcular A=B+C. Como B y C son positivos, A también lo será, y esto se convierte simplemente en

(A)2 = (B) 2 + (C) 2

Como los tres números son positivos, no hay que utilizar complemento a dos. Cuando A> 2n-1-1, es decir, cuando hay desbordamiento existe una dificultad. Es fácil detectar tal condición, ya que el bit del signo de A será incorrecto.

Ejemplo 24.

Calcule (9)10 + (5)10 con aritmética de complemento a dos de 5 bits.

+(9) 10 = +(1001) 2 = (0,1001) 2ms

+(5) 10 = +(0101) 2 = (0,0101) 2ms

Al sumar estos códigos de 5 bits se obtiene


      0    1    0    0    1
      0    0    1    0    1
______________________
+    0    1    1    1    0

Como el resultado también tiene un bit de signo 0, representa correctamente la suma derecha, que se interpreta como,

(0,1110)2ms = +(1110)2 = (14)10

Ejemplo 25.

Calcular (12)10 + (7)10

(12)10 = +(1100)2 = (0,1100)2ms

(7)10 = +(0111)2 = (0,0111)2ms

Sumando los dos códigos de 5 bits resulta


      0    1    1    0    0
      0    0    1    1    1
______________________
+    1    0    0    1    1

El resultado es (1,0011)2ms, que se interpreta, como (1,0011)2ms= -(1101) = -(13)10

El resultado es un número negativo. Sin embargo, esto no puede ser correcto, por lo que debe haber una explicación. La respuesta es que la suma de los dos números dados requiere mas espacio que los cinco bits originados para representarla.

La suma correcta es +(19)10, que está fuera del intervalo de números de complemento a dos de cinco bits, pues la escala total positiva es (0,1111)2ms=+(15)10. El bit de signo incorrecto obtenido en los cálculos indica un resultado incorrecto. Por tanto, hay una condición de desbordamiento.

Caso 2:

Calcular A = B - C. Se considera este cálculo como A = B +(- C) de la siguiente manera:

A = (B)2 + (- (C)2)

A = (B)2 + [C]2

A = (B)2 + 2n – (C)2

A = 2n + (B - C)2

2n es un término adicional. Si B ³ C, entonces B-C³ 0, lo que hace A³ 2n. El término 2n representa un bit de acarreo y se puede ignorar, conservando (B - C)2. Por tanto (A)2 = (B)2 + [C]2 y se descarta el acarreo. Si B < C, entonces B - C < 0, lo que da A = 2n - (C – B)2= [C - B]2, o A= - (C - B)2 que es la respuesta deseada. En este caso no hay acarreo.

Si B y C son ambos positivos, la magnitud de B - C siempre será menor que cualquiera de los dos números. Esto significa que no se presenta desbordamiento al calcular B - C.

Ejemplo 26.

Calcular (12)10 – (5)10

Se realiza este cálculo como (12)10 + (-(5)10)

(12)10 = (1100)2 = (0,1100)2ms

-(5)10 = -(0101)2 = (1,1011)2ms

Se suman los dos números de 5 bits

      0    1    1    0    0
+    1    1    0    1    1
______________________
1    0    0    1    1    1


Al descartar el acarreo, el bit de signo es cero y por tanto, se interpreta el resultado como (0,0111)2ms = +(0111)2 = +(7)10

Ejemplo 27.

Calcule (5)10 – (12)10

Se realiza el cálculo como (5)10 + (-(12)10).

(5)10 = +(0101)2 = (0,0101)2ms

-(12)10 = -(1100)2 = (1,0100)2ms

Se suman los dos códigos de 5 bits para obtener,


      0    0    1    0    1
+    1    0    1    0    0
______________________
0    1    1    0    0    1

En este caso no hay acarreo y el bit de signo es 1, lo que indica que el resultado es negativo.

(1,1001)2ms = -[1,1001]2

= -(00111)2ms

= -(0111)2

= -(7)10

Caso 3:

Calcule A = - B - C. El resultado es A = - (B + C) = [B + C]2.

Representamos - B y - C mediante el complemento a dos de sus magnitudes, y calculamos A = (- B) + (- C). Por tanto,

A = [B]2 + [C]2.

= 2n - (B)2 + 2n - (C)2

= 2n + 2n - (B + C)2

= 2n + [B + C]2

Si se descarta el bit de acarreo (2n), el cálculo produce el resultado correcto.

Ejemplo 28.

Calcule - (9)10 - (5)10

Se realiza el cálculo como (- (9)10) + (- (5)10).

(- 9)10 = - (1001)2 = (0,1001)2ms = [01001]2ms = (1,0111)2ms

(- 5)10 = - (0101)2 = (0,0101)2ms = [0,0101]2ms = (1,1011)2ms

Al sumar los dos códigos de cinco bits se obtiene:


      1    0    1    1    1
+    1    1    0    1    1
______________________
1    1    0    0    1    0

acarreo

Al descartar el acarreo se tiene un bit de signo 1. Por tanto el resultado es correcto y se interpreta como:

(1,0010)2ms = -[1,0010]2

= -(01110)2ms

= -(1110)2

= -(14)10

En este caso puede haber desbordamiento, lo que se indica mediante un resultado que tiene un bit de signo incorrecto como en el ejemplo siguiente.

Ejemplo 29.

Calcule - (12)10 - (5)10

Se realiza el cálculo como (- (12)10) + (- (5)10).

(- 12)10 = - (1100)2 = (0,1100)2ms = (1,0100)2ms

(- 5)10 = - (0101)2 = (0,0101)2ms = (1,1011)2ms

Al sumar los dos códigos de cinco bits se obtiene:


      1    0    1    0    0
+    1    1    0    1    1
______________________
1    0    1    1    1    1

acarreo

Al descartar el acarreo, se interpreta el resultado como:

(0,1111)2ms = (1111)2

= (15)10

El resultado es incorrecto.

Como el bit de signo es incorrecto, entonces, hay un desbordamiento.

Ejemplo 30.

Si A y B son variables enteras de un programa para computadora, con    A = + (25)10 y B = - (46)10.

Si la computadora utiliza aritmética de complemento a dos con 8 bits, mostrar la forma como calcularía A + B, A - B, B - A, y - A - B.

Las variables A y B se guardarían en la memoria de la computadora con el formato de sistema numérico de 8 bits de complemento a dos.

A = + (25)10 = (0,0011001)2ms

B = - (46)10 = - (0,0101110)2ms = (1,1010010)2ms

Calculemos los complementos a dos de A y B para representar - A y - B respectivamente.

- A = - (25)10 = - (0,0011001)2ms = (1,1100111)2ms

- B = - (- (46)10) = - (1,1010010)2ms = (0,0101110)2ms

Al realizar los cálculos se obtiene:

A + B:

      0    0    0    1    1    0    0    1
+    1    1    0    1    0    0    1    0
_________________________
0    1    1    1    0    1    0    1    1

A + B = (1,1101011)2ms = - (0,0010101)2ms = - (21)10



A - B = A + ( - B):

      0    0    0    1    1    0    0    1
+    0    0    1    0    1    1    1    0
______________________
0    0    1    0    0    0    1    1    1

A - B = (0,1000111)2ms = + (71)10



B - A = B + (- A):

      1    1    0    1    0    0    1    0
+    1    1    1    0    0    1    1    1
______________________
1    1    0    1    1    1    0    0    1

El resultado es B - A = (1,0111001) = - (0,1000111)2ms = - (71)10

- A - B = (- A) + (- B):

      1    1    1    0    0    1    1    1
+    0    0    1    0    1    1    1    0
______________________
1    0    0    0    1    0    1    0    1

- A - B = (0,0010101)2ms = (21)10



Ejemplo 31.

Sumar (75)10 y - (21)10 usando complemento de 10 de los dos números.

(75)10 = (0,75)10ms

- (21)10 = (9,79)10ms


      0    7    5
+    9    7    9
_____________
1    0    5    4

Descartando el dígito de acarreo, el resultado es (0,54)10ms = (54)10 que es el resultado correcto.