(1) Los complementos permiten representar números negativos en el sistema binario mediante la suma en lugar de la resta; (2) El complemento a uno de un número binario se obtiene invirtiendo todos sus bits; (3) El complemento a dos permite representar números negativos de forma que la resta se puede calcular como una suma.
Complementos binarios: representación de números negativos
1.
2. LOS COMPLEMENTOS. El problema que se trata de resolver es la forma de expresar números negativos en el sistema binario, valiéndonos únicamente de señales que solo pueden ser verdaderas o falsas. Es cierto que una de las señales podría representar el signo y el resto de las cifras formarían siempre un valor positivo, pero la electrónica del dispositivo sería compleja porque debería ser capaz de restar cuando encontrara el signo menos. Parece imposible, pero los complementos permiten hacer restas mediante sumas y reducen con ello la electrónica de la máquina. ¿Cree por ejemplo que el valor 9279 es igual a -721? Si los valores (en este ejemplo) se manipulan siempre en registros de 4 cifras y todo lo que se salga desaparece, entonces es cierto y lo vamos a ver: Si hacemos la suma 721 + 9279 se obtiene el valor 10000, pero como se ha dicho, en un registro de 4 cifras solo caben los 4 ceros y el 1 se pierde. Si en el registro solo hay ceros, el resultado hay que considerarlo 0, por lo tanto 721 + 9279 = 0, lo que solo es posible si 9279 es igual a -721.
3. Por supuesto, se puede pensar que se trata de un truco, y lo es, pero esto es lo que funciona realmente en los dispositivos digitales: Cuando introducimos dos valores y los restamos, la máquina transforma uno de los datos de manera que resuelve la resta haciendo una suma. Las reglas de la transformación tienen que ser muy simples ya que de lo contrario no compensaría el esfuerzo y tratándose del sistema binario, realmente son muy sencillas. El complemento a 1 de un valor binario se obtiene invirtiendo el estado de todas sus cifras, incluyendo los ceros a la izquierda hasta completar la capacidad del registro. Por ejemplo, el valor 10011 en un registro de 8 bits (cifras) será 00010011 y su complemento a 1 será 11101100. El complemento a 2 de un valor binario se obtiene sumando 1 al complemento a 1. Por ejemplo, el complemento a 2 de 10011 (el mismo anterior) será 11101100 + 1 = 11101101.
4.
5.
6. Ejemplo: En Complemento a 1, para n = 16 , el número -9503 10 se escribe calculando el Complemento a la Base Menos 1 del número 9503 10 escrito en base 2, es decir, del número 10010100011111 2 : C 1 (N) = C 1 (10010100011111) = = 2 n - 1 - N = = 2 16 - 1 - 10010100011111 = = 10000000000000000 - 1 - 10010100011111 = = 1101101011100000 C1 En consecuencia, -9503 10 = 1101101011100000 C1 Obsérvese que, el Complemento a 1 de un número entero positivo ( N ) escrito en binario es el resultado de cambiar todos los bits de valor, es decir, todos los ceros por unos y todos unos por ceros.
7. Por otra parte, dado un número entero positivo ( N ) en Complemento a 1, para calcular su valor en base 10, se puede utilizar la misma fórmula que en Signo Magnitud o que en Binario Puro. Un número ( N ) representado en Complemento a 1 es positivo si el bit más significativo es cero. En caso contrario, el número será negativo, y para calcular su valor en base 10, habrá que cambiar todos los unos por ceros y todos los ceros por unos, obteniendo así su correspondiente número positivo, al cual sí se le puede aplicar una de las fórmulas anteriores y cambiarle el signo al resultado.
8. SISTEMA DE NÚMEROS EN COMPLEMENTO A 2 Este es un sistema que nos permite representar números binarios de forma negativa, en donde el MSB (Bit mas Significativo) es el bit del signo. Si este bit es 0 entonces el numero binario es positivo (+), si el bit del signo es 1, entonces el numero es negativo(-) los siete bits restantes del registro representan la magnitud del numero 1010110, para complementar mejor la explicación tendremos que dedicarle mucha atención a la explicación de conversiones donde interviene este tipo de numeración, que es bastante utilizado en los microprocesadores, ya que estos manejan tanto números positivos como números negativos. 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 –2 n-1 £ N £ 2 n-1 -1, donde n es el número de bits disponibles para representar a N. Observe que 2 n-1 -1=(0,11...1) 2ms y que –2 n-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.
9. 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> 2 n-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
10. 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 + 2 n – (C) 2 A = 2 n + (B - C) 2 2 n es un término adicional. Si B ³ C, entonces B-C³ 0, lo que hace A³ 2 n . El término 2 n 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 = 2 n - (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