
El complemento a uno de un número binario es el valor que se obtiene al invertir (cambiar) todos los bits del número (es decir, cambiar cada 1 por un 0 y cada 0 por un 1). El nombre "complemento a uno" [ 1 ] se refiere al hecho de que dicho valor invertido, si se suma al original, siempre producirá un número con todos los bits a uno (el término " complemento " se refiere a pares de números inversos mutuamente aditivos , en este caso con respecto a un número base distinto de cero). Esta operación matemática es de interés principalmente en informática , donde tiene efectos variables según cómo un ordenador específico represente los números.
Un sistema de complemento a uno o aritmética de complemento a uno es un sistema en el que los números negativos se representan mediante el inverso de las representaciones binarias de sus números positivos correspondientes. En dicho sistema, un número se niega (se convierte de positivo a negativo o viceversa) calculando su complemento a uno. Un sistema numérico de complemento a uno de N bits solo puede representar enteros en el rango de −(2 N−1 −1) a 2 N−1 −1, mientras que el complemento a dos puede expresar de −2 N−1 a 2 N−1 −1. Es una de las tres representaciones comunes para enteros negativos en computadoras binarias , junto con el complemento a dos y la magnitud de signo .
El sistema numérico binario en complemento a uno se caracteriza porque el complemento bit a bit de cualquier valor entero es su negativo aritmético. Es decir, invertir todos los bits de un número (el complemento lógico) produce el mismo resultado que restarle 0.
Muchos de los primeros ordenadores, como el UNIVAC 1101 , el CDC 160 , el CDC 1604 , el CDC 6600 , el LINC , el DEC PDP-1 , el UNIVAC 1107 y sus sucesores, utilizaban aritmética de complemento a uno. Los sucesores del CDC 6600 continuaron utilizando aritmética de complemento a uno hasta finales de la década de 1980, junto con los descendientes del UNIVAC 1107 (la serie UNIVAC 1100/2200 ), pero todos los ordenadores modernos utilizan complemento a dos .
Representación numérica
Los números positivos utilizan el mismo sistema binario simple que el complemento a dos y la magnitud de signo. Los valores negativos son el complemento de bits del valor positivo correspondiente. El valor positivo más grande se caracteriza porque el bit de signo (de orden superior) está desactivado (0) y todos los demás bits están activados (1). El valor negativo más pequeño se caracteriza porque el bit de signo es 1 y todos los demás bits son 0. La tabla a continuación muestra todos los valores posibles en un sistema de cuatro bits, desde -7 hasta +7.
+ − 0 0000 1111 — Tanto +0 como −0 devuelven VERDADERO cuando se comprueba si son cero. 1 0001 1110 — y FALSO cuando se comprueba que sea distinto de cero. 2 0010 1101 3 0011 1100 4 0100 1011 5 0101 1010 6 0110 1001 7 0111 1000
Lo esencial
Sumar dos valores es sencillo. Simplemente alinee los valores en el bit menos significativo y súmelos, propagando cualquier acarreo al bit situado una posición a la izquierda. Si el acarreo se extiende más allá del final de la palabra, se dice que ha "enrollado", una condición denominada " acarreo de extremo a extremo ". Cuando esto ocurre, el bit debe sumarse de nuevo en el bit más a la derecha. Este fenómeno no se produce en la aritmética de complemento a dos.
0001 0110 22 + 0000 0011 3 =========== ==== 0001 1001 25
La resta es similar, excepto que los préstamos, en lugar de los acarreos, se propagan hacia la izquierda. Si el préstamo se extiende más allá del final de la palabra, se dice que ha "envuelto", una condición llamada " préstamo de extremo a extremo ". Cuando esto ocurre, el bit debe restarse del bit más a la derecha. Este fenómeno no se da en la aritmética de complemento a dos.
0000 0110 6 − 0001 0011 19 =========== ==== 1 1111 0011 −12 —Se produce un préstamo de extremo a extremo, y el bit de signo del resultado intermedio es 1. − 0000 0001 1 —Resta el préstamo de extremo a extremo del resultado. =========== ==== 1111 0010 −13 —El resultado correcto (6 − 19 = −13)
Es fácil demostrar que el complemento bit a bit de un valor positivo es la magnitud negativa de dicho valor. El cálculo de 19 + 3 produce el mismo resultado que 19 − (−3).
Suma 3 a 19.
0001 0011 19 + 0000 0011 3 =========== ==== 0001 0110 22
Resta −3 a 19.
0001 0011 19 − 1111 1100 −3 =========== ==== 1 0001 0111 23 —Se produce un préstamo de borde . − 0000 0001 1 —Resta el préstamo de extremo a extremo del resultado. =========== ==== 0001 0110 22 —El resultado correcto (19 − (−3) = 22).
Cero negativo
El cero negativo se define como la condición en la que todos los bits de una palabra con signo son 1. Esto sigue las reglas del complemento a uno, según las cuales un valor es negativo cuando el bit más a la izquierda es 1, y un número negativo es el complemento a bits de su magnitud. Este valor también se comporta como cero al realizar cálculos. Sumar o restar cero negativo a otro valor produce el valor original.
Agregar cero negativo:
0001 0110 22 + 1111 1111 −0 =========== ==== 1 0001 0101 21 Se produce un acarreo de extremo a extremo . + 0000 0001 1 =========== ==== 0001 0110 22 El resultado correcto (22 + (−0) = 22)
Restar menos cero:
0001 0110 22 − 1111 1111 −0 =========== ==== 1 0001 0111 23 Se produce un préstamo de borde . − 0000 0001 1 =========== ==== 0001 0110 22 El resultado correcto (22 − (−0) = 22)
El cero negativo se obtiene fácilmente en un sumador de complemento a uno. Simplemente se suman los valores positivos y negativos de la misma magnitud.
0001 0110 22 + 1110 1001 −22 =========== ==== 1111 1111 −0 Cero negativo.
Aunque los cálculos matemáticos siempre producen los resultados correctos, un efecto secundario del cero negativo es que el software debe comprobar si existe ese valor.
Evitar el cero negativo
La generación de cero negativo deja de ser un problema si la suma se realiza con un restador complementario. El primer operando se pasa al restador sin modificar, el segundo operando se complementa y la resta genera el resultado correcto, evitando el cero negativo. El ejemplo anterior sumó 22 y -22 y produjo -0.
0001 0110 22 0001 0110 22 1110 1001 −22 1110 1001 −22 + 1110 1001 −22 − 0001 0110 22 + 0001 0110 22 − 1110 1001 −22 =========== ==== pero =========== ==== ; y =========== === pero =========== === 1111 1111 −0 0000 0000 0 1111 1111 −0 0000 0000 0
Se producen "casos límite" cuando uno o ambos operandos son cero y/o cero negativo.
0001 0010 18 0001 0010 18 − 0000 0000 0 − 1111 1111 −0 =========== ==== =========== ==== 0001 0010 18 1 0001 0011 19 − 0000 0001 1 =========== ==== 0001 0010 18
Restar +0 es trivial (como se muestra arriba). Si el segundo operando es -0, se invierte y el resultado es el valor original del primer operando. Restar −0 también es trivial. El resultado solo puede ser uno de dos casos. En el caso 1, el operando 1 es −0, por lo que el resultado se obtiene simplemente restando 1 de 1 en cada posición de bit. En el caso 2, la resta generará un valor que es 1 mayor que el operando 1 y un préstamo de extremo a extremo . Al completar el préstamo se genera el mismo valor que el operando 1.
El siguiente ejemplo muestra lo que sucede cuando ambos operandos son cero o más cero:
0000 0000 0 0000 0000 0 1111 1111 −0 1111 1111 −0 + 0000 0000 0 + 1111 1111 −0 + 0000 0000 0 + 1111 1111 −0 =========== ==== =========== ==== =========== ==== =========== ==== 0000 0000 0 1111 1111 −0 1111 1111 −0 1 1111 1110 −1 + 0000 0001 1 ================== 1111 1111 −0
0000 0000 0 0000 0000 0 1111 1111 −0 1111 1111 −0 − 1111 1111 −0 − 0000 0000 0 − 1111 1111 −0 − 0000 0000 0 =========== ==== =========== ==== =========== ==== =========== ==== 1 0000 0001 1 0000 0000 0 0000 0000 0 1111 1111 −0 − 0000 0001 1 =========== ==== 0000 0000 0
Este ejemplo muestra que, de las cuatro condiciones posibles al sumar solo ±0, un sumador producirá −0 en tres de ellas. Un restador complementario producirá −0 solo cuando el primer operando sea −0 y el segundo sea 0.
Véase también
- IEEE 754 — Estándar para aritmética de punto flotante
- Representaciones de números con signo
- Complemento de dos
Referencias
- ↑ Knuth, Donald E. (1982). «4.1. Sistemas de numeración posicional». El arte de la programación informática, volumen 2: algoritmos seminuméricos (3.ª ed.). Reading, Mass: Addison-Wesley. pp. 203–204 . ISBN 0-201-03801-3
Los lectores y correctores de estilo más detallistas deberían fijarse en la posición del apóstrofo en términos como "complemento a dos" y "complemento a uno": un número en complemento a dos se complementa con respecto a una sola potencia de 2, mientras que un número en complemento a uno se complementa con respecto a una larga secuencia de 1s
.
- Aritmética binaria
- Sistemas numéricos
- operaciones unarias