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.
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.
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.
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.
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.
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.
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.
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.
El complemento disminuido a una base [N]r � 1 de un número (N)r se define como: [N]r � 1 = r n - (N) r - 1, donde n es el número de dígitos de (N)r.
El complemento a uno es un caso particular del complemento disminuido a una base para números binarios y está dado por:
[N] 2 � 1 = 2n - (N)2-1, donde n es el número de bits de (N)2.
Algoritmo para determinar [N]r � 1 dado (N) r.
Reemplazamos cada dígito ai de (N)r por r - 1 - ai. Observe que si r = 2, basta con complementar cada bit individual de (N)r.
Ejemplo.
Sumar: (1001)2 y - (0100)2.
(1001)2: 0 1 0 0 1
- (0100)2: + 1 1 0 1 1
________________________
1 0 0 1 0 0
Se obtiene el resultado correcto si el acarreo de salida del bit más significativo se suma a la posición del bit menos significativo. Es decir 00100 + 1 = 00101.
Este procedimiento se conoce como acarreo final circular y es un paso de corrección necesario en la aritmética de complemento disminuido.
Por tanto, + (1001)2 - (0100)2 = (0,0101)2ms = (101)2.
Ejemplo.
Sumar +(1001)2 y - (1111)2
+(1001)2: 0 1 0 0 1
-(1111)2: + 1 0 0 0 0
______________
1 1 0 0 1
El acarreo final circular es 0 y por tanto,
+ (1001)2 - (1111)2 = (1,1001)2ms = - (0,0110)2ms = -(0110)2.
Ejemplo.
Sumar (75)10 y - (21)10
El complemento a nueve de 021 es 978. Por tanto, 075 + 978 = 1053, que es el resultado correcto después del procedimiento de acarreo final circular 053 + 1 = 054.
Ejemplo.
Sumar (21)10 y - (75)10.
El cálculo de 021 + 924 = 945, que es el resultado correcto, pues el acarreo final es cero. Así, (9,45)10ms = - (0,54) 10ms = -(54)10.
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario