Bits | sin firmar valor | Unos complemento valor |
---|---|---|
0111 1111 | 127 | 127 |
0111 1110 | 126 | 126 |
0000 0010 | 2 | 2 |
0000 0001 | 1 | 1 |
0000 0000 | 0 | 0 |
1111 1111 | 255 | −0 |
1111 1110 | 254 | −1 |
1111 1101 | 253 | −2 |
1000 0001 | 129 | −126 |
1000 0000 | 128 | −127 |
El complemento a unos de un número binario es el valor obtenido al invertir todos los bits en la representación binaria del número (intercambiando ceros y unos). Esta operación matemática es de interés principalmente en las ciencias de la computación , donde tiene efectos variables dependiendo de cómo una computadora específica represente los números.
Un sistema de complemento a unos o una aritmética de complemento a unos es un sistema en el que los números negativos están representados por el inverso de las representaciones binarias de sus correspondientes números positivos. En tal sistema, un número se niega (se convierte de positivo a negativo o viceversa) calculando el complemento de sus unidades. Un sistema numérico de complemento a uno de N bits solo puede representar números enteros en el rango - (2 N − 1 −1) a 2 N − 1 −1, mientras que el complemento a dos puede expresar −2 N − 1 a 2 N − 1 −1. Es una de las tres representaciones comunes de números enteros negativos en microprocesadores , junto con el complemento a dos y la magnitud del signo .
El sistema de numeración binario en complemento a unidades se caracteriza porque el complemento de bits de cualquier valor entero es el negativo aritmético del valor. Es decir, invertir todos los bits de un número (el complemento lógico) produce el mismo resultado que restar el valor de 0.
Muchas de las primeras computadoras, incluidas UNIVAC 1101 , CDC 160 , CDC 6600 , LINC , PDP-1 y UNIVAC 1107 , usaban aritmética de complemento. Los sucesores del CDC 6600 continuaron usando la aritmética del complemento de uno hasta finales de la década de 1980, y los descendientes del UNIVAC 1107 (la serie UNIVAC 1100/2200 ) todavía lo hacen, pero la mayoría de las computadoras modernas usan el complemento de dos .
Representación numérica
Los números positivos son el mismo sistema binario simple utilizado por 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 (orden superior) está desactivado (0) y todos los demás bits están activados (1). El valor negativo más bajo se caracteriza porque el bit de signo es 1 y todos los demás bits son 0. La siguiente tabla muestra todos los valores posibles en un sistema de 4 bits, de −7 a +7.
+ - 0 0000 1111: tenga en cuenta que tanto +0 como −0 devuelven VERDADERO cuando se prueban para cero 1 0001 1110 - y FALSO cuando se prueba para un valor distinto de cero. 2 0010 1101 3 0011 1100 4 0100 1011 5 0101 1010 6 0110 1001 7 0111 1000
Lo esencial
Agregar dos valores es sencillo. Simplemente alinee los valores en el bit menos significativo y agregue, propagando cualquier acarreo al bit una posición a la izquierda. Si el acarreo se extiende más allá del final de la palabra, se dice que está "envuelto", una condición llamada " acarreo de extremo alrededor ". Cuando esto ocurre, el bit debe volver a agregarse en el bit más a la derecha. Este fenómeno no ocurre en la aritmética en 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 está "envuelto", una condición llamada " préstamo final ". Cuando esto ocurre, el bit debe restarse del bit más a la derecha. Este fenómeno no ocurre en la aritmética en complemento a dos.
0000 0110 6- 0001 0011 19=========== ====1 1111 0011 −12: se produce un préstamo de extremo alrededor y el bit de signo del resultado intermedio es 1.- 0000 0001 1: reste el préstamo final del resultado.=========== ==== 1111 0010 −13: el resultado correcto (6-19 = -13)
Es fácil demostrar que el complemento de bits de un valor positivo es la magnitud negativa del valor positivo. 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
Reste −3 de 19.
0001 0011 19- 1111 1100 −3=========== ====1 0001 0111 23 —Se produce un préstamo final .- 0000 0001 1: reste el préstamo final del resultado.=========== ==== 0001 0110 22: el resultado correcto (19 - (−3) = 22).
Cero negativo
El cero negativo es la condición en la que todos los bits de una palabra con signo son 1. Esto sigue las reglas del complemento a unas de que un valor es negativo cuando el bit más a la izquierda es 1 y que un número negativo es el complemento de bits de la magnitud del número. El valor también se comporta como cero al calcular. Sumar o restar cero negativo a / de otro valor produce el valor original.
Sumando cero negativo:
0001 0110 22+ 1111 1111 −0=========== ====1 0001 0101 21 Se produce un acarreo de vuelta .+ 0000 0001 1=========== ==== 0001 0110 22 El resultado correcto (22 + (−0) = 22)
Restando cero negativo:
0001 0110 22- 1111 1111 −0=========== ====1 0001 0111 23 Se produce un préstamo final .- 0000 0001 1=========== ==== 0001 0110 22 El resultado correcto (22 - (−0) = 22)
El cero negativo se produce fácilmente en un sumador de complemento de 1. Simplemente agregue lo positivo y lo negativo de la misma magnitud.
0001 0110 22+ 1110 1001 −22=========== ==== 1111 1111 −0 Cero negativo.
Aunque las matemáticas siempre producen los resultados correctos, un efecto secundario del cero negativo es que el software debe probar el cero negativo.
Evitando el cero negativo
La generación de cero negativo se convierte en un problema si la suma se logra con un restador complementario. El primer operando se pasa a la resta sin modificar, el segundo operando se complementa y la resta genera el resultado correcto, evitando el cero negativo. El ejemplo anterior agregó 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 =========== ==== igualmente, =========== === pero == ========= === 1111 1111 −0 0000 0000 0 1111 1111 −0 0000 0000 0
Los "casos de esquina" surgen 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 cero negativo, se invierte y el resultado es el valor original del primer operando. Restar −0 también es trivial. El resultado puede ser solo uno de dos casos. En el caso 1, el operando 1 es −0, por lo que el resultado se produce simplemente restando 1 de 1 en cada posición de bit. En el caso 2, la resta generará un valor 1 más grande que el operando 1 y un préstamo final . Completar el préstamo genera el mismo valor que el operando 1.
El siguiente ejemplo muestra lo que sucede cuando ambos operandos son más o menos 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 4 condiciones posibles al sumar solo ± 0, un sumador producirá −0 en tres de ellas. Un restador complementario producirá −0 solo cuando ambos operandos sean −0.
Ver también
Referencias
- Donald Knuth : El arte de la programación informática , Volumen 2: Algoritmos seminuméricos, capítulo 4.1