stringtranslate.com

complemento de unos

El complemento a unos de un número binario es el valor que se obtiene al invertir (voltear) todos los bits en la representación binaria del número. El nombre "complemento de unos" [1] se refiere al hecho de que dicho valor invertido, si se suma al original, siempre produciría un número "todos unos" (el término " complemento " se refiere a pares de números inversos mutuamente aditivos , aquí con respecto a un número base distinto de 0). Esta operación matemática es de interés principalmente en informática , donde tiene diferentes efectos dependiendo de cómo una computadora específica representa los números.

Un sistema en complemento a uno o aritmética en complemento a uno es un sistema en el que los números negativos están representados por la inversa 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 su complemento a unos. Un sistema numérico en 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 computadoras binarias , junto con el complemento a dos y el signo-magnitud .

El sistema de numeración binaria en complemento a unos se caracteriza por que 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 la UNIVAC 1101 , CDC 160 , CDC 6600 , LINC , PDP-1 y UNIVAC 1107 , usaban aritmética en complemento a uno. Los sucesores del CDC 6600 continuaron usando la aritmética en complemento a 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 a dos .

Representación numérica

Los números positivos son el mismo sistema binario simple utilizado por el complemento a dos y el signo-magnitud. Los valores negativos son el complemento de bits del valor positivo correspondiente. El valor positivo más grande se caracteriza por que el bit de signo (de orden superior) está apagado (0) y todos los demás bits están encendidos (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 cuatro bits, de −7 a +7.

 + − 0 0000 1111 — Tenga en cuenta que tanto +0 como −0 devuelven VERDADERO cuando se prueba que son cero 1 0001 1110 - y FALSO cuando se prueba para valores distintos 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 sume, 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 ha "envuelto", una condición llamada " acarreo final ". Cuando esto ocurre, el bit se debe volver a agregar 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 se ha "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 final 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

Resta −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 unos 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 final .+ 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 en complemento a uno. Simplemente suma 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 deja de ser 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 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 =========== ==== 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 sólo 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 que es 1 mayor 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 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.

Ver también

Referencias

  1. ^ Knuth, Donald E. "4.1. Sistemas numéricos posicionales". El arte de la programación informática, volumen 2: algoritmos seminuméricos (3ª ed.). Los lectores y editores orientados a los detalles deberían notar la posición del apóstrofe 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 es complementado con respecto a una larga secuencia de unos.