Complemento a dos

Ir a Representación de Datos

Si deseas revisar información relacionada a la representación de datos en el computador, haz click en el siguente botón.

El complemento a uno resuelve uno de los problemas de la notación en signo y magnitud, la complejidad para realizar la suma, pero padece del mismo problema de la doble representación del cero. ¿Existe alguna forma de representación que además de simplificar la suma, solo utilice una única forma de representar el cero? Por supuesto que sí, existe y esta es la notación en complemento a dos. 

En este artículo revisaremos cómo el computador utiliza el operador de complemento a dos para representar números enteros con signo. Revisaremos cómo se realiza la suma en binario de números enteros y analizaremos los puntos fuertes y débiles del Complemento a dos para la representación de números con signo.

Al finalizar te invitamos a visites los siguientes artículos relacionados.

Veamos ahora la operación de Complemento a dos, la operación que usan las computadoras modernas para representar los números negativos. El complemento a dos de un número natural es una operación matemática que se le puede aplicar a un determinado número representado en binario con un tamaño fijo de n bits. Se calcula como:

c_2^n(x)=2^n-x

Donde x es el número natural y n es el número de bits. Es lo mismo que decir sumarle uno a la operación de complemento a uno, tal como se presenta en la expresión siguiente:

c^n_2(x)= c^n_1(x)+1

c^n_2(x)= 2^n-x-1+1

c^n_2(x)= 2^n-x

Veamos a continuación un ejemplo de esta operación matemática. Vamos a obtener el complemento a dos del número 1. Tal como se ha visto anteriormente, la representación del 1 en binario usando 8 bits corresponde a un octeto con todos los bits apagados excepto el menos significativo, el que está más a la derecha.

representación del 1 en binario
Ejempo de representación del número 1 en binario

Ahora, operamos para obtener el complemento a dos de este número usando 8 bits. Esto sería 2^8-1=256-1=255. La representación del 255 en binario es la siguiente.

representación en complemento a dos del número 1
Ejemplo de representación del complemento a dos del número 1 en binario

Ejemplos de representación en Complemento a dos

Vamos a presentar otro ejemplo de representación de números en complemento a dos. Dado el número natural 77, procedemos a representarlo en binario. La representación de este número en binario, puede apreciarse en la siguiente figura:
ejemplo de representación del número 77 en binario
Ejempo de representación del número 77 en binario

Procederemos ahora a representar el número 77 en complemento a dos. La forma natural de realizar esto es aplicar la operación c_2^n(x)=2^n-x definida previamente. Pero, si tenemos la representación en binario del número 77, podemos obtener la representación en complemento a dos de las siguientes maneras:

  1. Podemos pasarlo a complemento a uno y luego sumarle 1, matemáticamente hablando es lo mismo, pero es más simple de realizarlo a nivel de bits.
  2. Otra forma de representar el número en complemento a dos es identificar el primer bit con 1 en la representación original y a partir de los siguientes bits, invertir el valor de los bits.

 

Para el número 77, el primer bit con valor de 1 se encuentra en la posición 0, entonces se deja ese bit tal como está y se invierten los demás bits, desde la posición 1 inclusive, lo que resulta en el número 1011 0011, tal como se aprecia en la siguiente figura.

ejemplo de representación del número 77 en complemento a dos
Ejemplo de representación en complemento a dos del número 77 en binario

Representación de números con signo en C2

Esta operación de Complemento a dos se usa para representar los números enteros con signo de la siguiente manera:

  • Los números positivos se representan usando la base 2 de forma similar a la representación en signo y magnitud y complemento a uno. Teniendo en consideración que el bit más significativo debe ser cero.
  • Los números negativos se representan usando el operador de complemento a dos. Se opera usando valor absoluto del número que se desea representar. En este caso, el bit más significativo será siempre 1.

El máximo número positivo en C2

El máximo número positivo que se puede representar en complemento a dos se da cuando el bit más significativo tiene el valor de 0 y todos los demás bits, 1. En un octeto sería el número 0111 1111 que corresponde al número 127.

representación del mayor número positivo en c1
El máximo número entero positivo en un octeto en C2

El máximo número negativo en C2

El máximo número negativo que se puede representar en complemento a dos se da cuando se tiene el bit más significativo con el valor de 1 y todos los demás bits en 0. En un octeto sería el número 1000 0000 que corresponde al número -128. En complemento a dos, al igual que en complemento a uno, cuando el bit más significativo está prendido, significa que se representa a un número negativo. El valor del número se calcula sumando todas las potencias de dos, pero considerando la potencia del bit más significativo con valor negativo. En este caso, como tenemos 1000 0000, el valor del número sería -2^7=-128.

máximo entero negativo en complemento a dos
El máximo número entero negativo en un octeto en C2

La representación del cero en C2

El complemento a dos no posee el problema de la doble representación del cero que tiene la representación en signo y magnitud y complemento a uno, por lo que con esta representación se podrá representar un número adicional. 

representación del cero en complemento a dos
Representación del cero en C2. Representación única.

Rango de representación

Con n bits se pueden representar 2^n números. De forma general se puede decir que, el rango de los números va desde -2^{n-1} hasta +2^{n-1}-1.

Por ejemplo, con 3 bits se podrán representar 2^3 =8 números, que van desde el -4 hasta el +3

Valor en DecimalValor en C2
+0000
+1001
+2010
+3011
-4100
-3101
-2110
-1111

Operaciones aritméticas

La suma en esta representación es mucho más sencilla que en Signo y Magnitud y Complemento a uno. Basta sumar bit a bit desde el bit menos significativo al bit más significativo, es decir de derecha a izquierda. 

No es necesario prestar atención si es que los sumados tienen signo igual o diferente como en el caso de Signo y Magnitud. Tampoco hay que prestar atención al acarreo final como en el caso de Complemento a uno. Por esta razón, es la forma de representación de números enteros usada en los computadores modernos.

A continuación presentamos algunas imágenes en donde se puede apreciar diversas operaciones aritméticas.

ejemplo de suma en c2 | 6 + -3
ejemplo de suma en c2 | 6 + -9
ejemplo de suma en c2 | 27 + -14
ejemplo de suma en c2 | 38 + -59

Conclusión

Como hemos podido observar, la representación en Complemento a dos posee las siguientes ventajas:

Quizás el único problema que se le podría encontrar en esta representación es que el rango de representación es asimétrico.

Si te ha gustado este artículo, te invitamos a que leas los artículos relacionados con la representación de números enteros en el computador.

Si te interesa investigar más sobre la representación en signo y magnitud, te recomendamos los siguientes libros:

  •  Computer Arithmetic: Algorithms and Hardware Designs de Behrooz Parhami, en donde detalla la representación de números enteros con y sin signo, números reales y la implementación de las principales operaciones aritméticas.
  • Digital Arithmetic  de Miloš D. Ercegovac  y Tomás Lang . En este libro, además de revisar la representación de números enteros y reales, se analizan algoritmos para implementación de rutinas de cálculo numérico como por ejemplo la raíz cuadrada