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.
Tabla de contenidos
Operación Complemento a dos
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.

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.

Ejemplos de representación en Complemento a dos

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:
- 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.
- 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.

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.

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.

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.

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 Decimal | Valor en C2 |
---|---|
+0 | 000 |
+1 | 001 |
+2 | 010 |
+3 | 011 |
-4 | 100 |
-3 | 101 |
-2 | 110 |
-1 | 111 |
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.




Conclusión
Como hemos podido observar, la representación en Complemento a dos posee las siguientes ventajas:
- Realiza las operación aritméticas de un forma más sencilla que en Signo y Magnitud y Complemento a uno.
- Posee una única forma de representación del cero.
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
- Todas las imágenes han sido elaboradas por Andrés Melgar.