Complemento a uno

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.

Una de las desventajas que tenía esta forma de representación es que operaciones simples como la suma de números se tornaba complicada. ¿Será que existe alguna otra manera de representación que simplifique la suma? Pues claro que sí!!!, en este artículos discutiremos cómo se representan números enteros con signo usando la notación en Complemento a uno.

Revisaremos cómo el computador utiliza el operador de complemento a uno para representar números negativos. Revisaremos cómo se realizan la suma en binario de números en esta representación y analizaremos los puntos fuertes y débiles del Complemento a uno para la representación de números con signo.

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

 

Antes de explicar cómo se representan los números enteros usando el complemento a uno, tenemos que revisar antes qué es el Complemento a uno. El complemento a uno de un número natural es una operación matemática que se le puede aplicar a un determinado número representado en binario usando un tamaño fijo de n bits. Se calcula como:

c_1^n(x)=2^n-x-1

Donde x es el número natural y n es el número de bits. Veamos a continuación un ejemplo de esta operación matemática. Vamos a obtener el complemento a uno del número 1. Analicemos el número 1 en binario: la representación del 1en 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
Ejemplo de representación del número 1 en binario

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

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

Como puede notar, el complemento a uno del número en binario es la misma representación, pero con los bits invertidos. Donde había cero ahora hay uno y donde había uno ahora hay cero. Este comportamiento ocurrirá con todas las representaciones en binario del complemento a uno, por lo que para obtener el complemento a uno de un determinado número, basta invertirle los bits de su representación binaria.

Representación de números con signo en C1

Esta operación de Complemento a uno 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. 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 uno. 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 C1

El máximo número positivo que se puede representar en complemento a uno 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 C1

El máximo número negativo en C1

El máximo número negativo que se puede representar en complemento a uno 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 -127. 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 e incrementándole el valor de uno, 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+1=-128+1=-127.

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

La representación del cero en C1

El complemento a uno posee el mismo problema que la representación en signo y magnitud: el cero tiene dos posibles formas de representarse, una para el cero «positivo» y otra para el cero «negativo».

doble representación del cero en C1
Desventaja de la representación en C1, la doble representación del cero.

Rango de representación

Con n bits se podrían representar 2^n números, pero como en esta representación se utilizan dos formas para representar el cero, en realidad solo se podrán representar 2^n-1 números. De forma general se puede decir que, el rango de los números va desde -2^{n-1}-1 hasta +2^{n-1}-1.

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

Valor en DecimalValor en C1
+0000
+1001
+2010
+3011
-3100
-2101
-1110
-0111

Operaciones aritméticas

La suma en esta representación es mucho más sencilla que en Signo y Magnitud. Basta sumar bit a bit desde el bit menos significativo al bit más significativo, es decir de derecha a izquierda. Pero hay que tener un detalle, si el acarreo final es un número diferente de cero, debe sumársele al octeto.

Ejemplo de suma sin acarreo final

Vamos a presentar dos ejemplos de suma en Complemento a uno en donde al finalizar la suma, el acarreo final es cero. En el primer ejemplo, presentamos la operación 6+-9. Como puede observar en la figura, al operar el último bit, el acarreo que se obtiene es cero, pues 0+1=1 y no hay acarreo. En este ejemplo, la operación termina.

suma en C1 | 6+-9 | sin acarreo final

En el segundo ejemplo, presentamos la operación 38+-59. Como puede observar en la figura, al operar el último bit, el acarreo que se obtiene es cero, pues 0+1=1 y no hay acarreo. En este ejemplo, la operación también termina acá.

suma en C1 | 38+-59 | sin acarreo final

Ejemplo de suma con acarreo final​

Ahora vamos a presentar dos ejemplos de suma en Complemento a uno en donde al finalizar la suma, el acarreo final es uno. En el primer ejemplo, presentamos la operación -6+-3. Como puede observar en la figura, al operar el último bit, el acarreo que se obtiene es uno En este caso, la operación de suma no termina. Hay que sumarle el acarreo al octeto.

suma en C1 | -6+-3 | con acarreo final (a)

Luego de sumarle el acarreo, el resultado queda como sigue:

suma en C1 | -6+-3 | con acarreo final (b)

En el segundo ejemplo, presentamos la operación 27+-14. Como puede observar en la figura, al operar el último bit, el acarreo que se obtiene es uno En este caso, la operación de suma no termina. Hay que sumarle el acarreo al octeto.

suma en C1 | 27+-14 | con acarreo final (a)

Luego de sumarle el acarreo, el resultado queda como sigue:

suma en C1 | 27+-14 | con acarreo final (b)

Conclusión

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

  • Realiza las operación aritméticas de un forma más sencilla que en Signo y Magnitud.
  • Posee un rango de representación es simétrico.

Lamentablemente, sigue existiendo la doble representación para el cero.

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