Complemento a dos

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Operación matemática en números binarios, y una representación número basado en esta operación

El complemento a dos es una operación matemática para convertir de forma reversible un número binario positivo en un número binario negativo con un valor negativo equivalente, utilizando el dígito binario con el mayor valor posicional como signo para indicar si el número binario es positivo o negativo. Se utiliza en informática como el método más común para representar enteros con signo (positivo, negativo y cero) en computadoras y, de manera más general, valores binarios de punto fijo. Cuando el bit más significativo es 1, el número se firma como negativo; y cuando el bit más significativo es 0, el número se firma como positivo (ver Convertir de dos's representación del complemento, abajo).

Procedimiento

Did you mean:

Two 's complement is achieved by:

  • Paso 1: empezando con el número positivo equivalente.
  • Paso 2: invertir (o voltear) todos los bits – cambiar cada 0 a 1, y cada 1 a 0;
  • Paso 3: añadir 1 a todo el número invertido, ignorando cualquier desbordamiento. La contabilidad para el desbordamiento producirá el valor equivocado para el resultado.

Por ejemplo, para calcular el número decimal −6 en binario:

  • Paso 1: +6 in decimal is 0110 en binario; el bit más importante izquierdo (el primer 0) es el signo. +6 no 110, porque 110 en binario −2 en decimal.
  • Paso 2: voltear todos los bits en 0110, dar 1001.
  • Paso 3: agregue el valor de lugar 1 al número volteado 1001, dar Graben 19, 1010.

Para verificar que 1010 efectivamente tiene un valor de −6, suma los valores posicionales, pero restando el signo del cálculo final. Debido a que el primer dígito significativo es el signo numérico, debe restarse para producir el resultado correcto: 1010 = (1×−23) + (0×22) + (1×21) + (0×20) = 1×−8 + 0 + 1×2 + 0 = −6.

Bits: 1 0 1 0
Valor de bit decimal: −8 4 2 1
Cálculo binario: ()1× 23) ()0× 22) ()1× 21) ()0× 20)
Cálculo decimal: 1× 8 - 01× 2 0

Teoría

El complemento a dos es un ejemplo de complemento a la base. El "dos" en el nombre se refiere al término que, expandido completamente en un sistema de N-bit, es en realidad "dos a la poder de N" - 2N (el único caso en el que se produciría exactamente 'dos' en este término es N = 1, por lo que para un sistema de 1 bit, pero estos no tienen capacidad tanto para un signo como para un cero), y es sólo este término completo con respecto al cual se calcula el complemento. Como tal, la definición precisa del complemento a dos de un número de N bits es el complemento de ese número con respecto a 2N.

La propiedad definitoria de ser un complemento de un número con respecto a 2N es simplemente que la suma de este número con el producto original 2N. Por ejemplo, usar binario con números de hasta tres bits (por lo que N = 3 y 2N = 23 = 8 = 10002, donde '2' indica una representación binaria), un complemento a dos para el número 3 (0112) es 5 (1012), porque sumado al original da 23 = 1000 2 = 0112 + 1012. Cuando esta correspondencia se emplea para representar números negativos, significa efectivamente, usando una analogía con dígitos decimales y un espacio numérico que solo permite ocho números no negativos del 0 al 7, dividiendo el espacio numérico en dos conjuntos: los primeros cuatro de los los números 0 1 2 3 siguen siendo los mismos, mientras que los cuatro restantes codifican números negativos, manteniendo su orden creciente, haciendo que 4 codifique -4, 5 codifique -3, 6 codifique -2 y 7 codifique -1. Sin embargo, una representación binaria tiene una utilidad adicional, porque el bit más significativo también indica el grupo (y el signo): es 0 para el primer grupo de no negativos y 1 para el segundo grupo de negativos. Las tablas de la derecha ilustran esta propiedad.

enteros de tres bits
Bits Valor no asignado Valor señalizado
(El complemento de dos)
000 0 0
001 1 1
010 2 2
011 3 3
100 4 −4
101 5 −3
110 6 −2
111 7 −1
enteros de 8 bits
Bits Valor no asignado Valor señalizado
(El complemento de dos)
0000 0000 0 0
0000 0001 1 1
0000 0010 2 2
0111 1110 126 126
0111 1111 127 127
1000 0000 128 −128
1000 0001 129 −127
1000 0010 130 −126
1111 1110 254 −2
1111 1111 255 −1

El cálculo del complemento binario a dos de un número positivo esencialmente significa restar el número del 2N. Pero como se puede ver en el ejemplo de tres bits y el 10002 de cuatro bits (2 3), el número 2N no será por sí mismo representable en un sistema limitado a N bits, ya que está justo fuera del <span class="texhtml mvar" style= "font-style:italic;"espacio de N bits (el número es, no obstante, el punto de referencia del "complemento a dos" en un N-sistema de bits). Debido a esto, los sistemas con un máximo de N-bits deben dividir la resta en dos operaciones: primero restar del número máximo en el sistema N-bit, es decir 2N-1 (este término en binario es en realidad un número simple que consta de 'todos 1', y una resta de él se puede hacer simplemente invirtiendo todos los bits en el número (también conocido como la operación NOT bit a bit) y luego sumando el uno. Coincidentemente, ese número intermedio antes de sumar el uno también se usa en informática como otro método de representación de números con signo y se llama Ones' complemento (llamado así porque al sumar ese número con el original da 'todos 1').

En comparación con otros sistemas para representar números con signo (p. ej., complemento a unos), el complemento a dos tiene la ventaja de que las operaciones aritméticas fundamentales de suma, resta y multiplicación son idénticos a los de los números binarios sin signo (siempre que las entradas se representen en el mismo número de bits que la salida y cualquier desbordamiento más allá de esos bits se descarte del resultado). Esta propiedad hace que el sistema sea más simple de implementar, especialmente para aritmética de mayor precisión. Además, a diferencia de los " sistemas complementarios, el complemento a dos no tiene representación para el cero negativo y, por lo tanto, no sufre las dificultades asociadas. De lo contrario, ambos esquemas tienen la propiedad deseada de que el signo de los números enteros se puede invertir tomando el complemento de su representación binaria, pero el componente Two tiene una excepción: el negativo más bajo, como se puede ver en las tablas.

Historia

El método de los complementos se ha utilizado durante mucho tiempo para realizar restas en máquinas sumadoras de decimales y calculadoras mecánicas. John von Neumann sugirió el uso de la representación binaria en complemento a dos en su propuesta de Primer borrador de un informe sobre el EDVAC de 1945 para una computadora digital de programa almacenado electrónico. El EDSAC de 1949, que se inspiró en el Primer borrador, utilizó la representación en complemento a dos de enteros binarios negativos.

Muchas de las primeras computadoras, incluidas la CDC 6600, la LINC, la PDP-1 y la UNIVAC 1107, usan ones' notación de complemento; los descendientes de UNIVAC 1107, la serie UNIVAC 1100/2200, continuaron haciéndolo. Las máquinas científicas de la serie IBM 700/7000 utilizan la notación de signo/magnitud, a excepción de los registros de índice que son complemento de dos. Las primeras computadoras comerciales que almacenan valores negativos en forma de complemento a dos incluyen English Electric DEUCE (1955) y Digital Equipment Corporation PDP-5 (1963) y PDP-6 (1964). El System/360, introducido en 1964 por IBM, entonces el actor dominante en la industria informática, hizo del complemento a dos la representación binaria más utilizada en la industria informática. La primera minicomputadora, la PDP-8 presentada en 1965, utiliza aritmética en complemento a dos, al igual que la Data General Nova de 1969, la PDP-11 de 1970 y casi todas las minicomputadoras y microcomputadoras posteriores.

Did you mean:

Converting from two 's complement representation

Un sistema numérico en complemento a dos codifica números positivos y negativos en una representación numérica binaria. El peso de cada bit es una potencia de dos, excepto el bit más significativo, cuyo peso es el negativo de la correspondiente potencia de dos.

El valorw of an N-bit integer aN− − 1aN− − 2...... a0{displaystyle a_{N-1}a_{N-2}dots A_{0} se da por la siguiente fórmula:

w=− − aN− − 12N− − 1+.. i=0N− − 2ai2i{displaystyle w=-a_{N-1}2^{N-1}+sum ¿Qué?

El bit más significativo determina el signo del número y, a veces, se denomina bit de signo. A diferencia de la representación de signo y magnitud, el bit de signo también tiene el peso −(2N − 1) mostrado arriba. Usando N bits, todos los enteros desde −(2N − 1) a 2N − 1 − 1 se pueden representar.

Did you mean:

Converting to two 's complement representation

En la notación de complemento a dos, un número no negativo se representa mediante su representación binaria ordinaria; en este caso, el bit más significativo es 0. Sin embargo, el rango de números representados no es el mismo que el de los números binarios sin signo. Por ejemplo, un número sin signo de 8 bits puede representar los valores de 0 a 255 (11111111). Sin embargo, un número de 8 bits en complemento a dos solo puede representar números enteros no negativos del 0 al 127 (01111111), porque el resto de las combinaciones de bits con el bit más significativo como '1' representan los enteros negativos −1 a −128.

Did you mean:

The two 's complement operation is the additive inverse operation, so negative numbers are represented by the two 's complement of the absolute value.

Did you mean:

From the one ' complement

Para obtener el complemento a dos de un número binario negativo, todos los bits se invierten, o se "invierten", mediante la operación NOT bit a bit; el valor de 1 se suma luego al valor resultante, ignorando el desbordamiento que ocurre cuando se toma el complemento a dos de 0.

Por ejemplo, usando 1 byte (=8 bits), el número decimal 5 está representado por

0000 01012

El bit más significativo (el bit más a la izquierda en este caso) es 0, por lo que el patrón representa un valor no negativo. Para convertir a −5 en notación de complemento a dos, primero, todos los bits se invierten, es decir: 0 se convierte en 1 y 1 se convierte en 0:

1111, 10102
Showing translation for

At this point, the representation is the one ' complement of the decimal value −5. To obtain the two 's complement, 1 is added to the result, giving:

1111 10112
Did you mean:

The result is a signed binary number representing the decimal value −5 in two 's-complement form. The most significant bit is 1, so the value represented is negative.

El complemento a dos de un número negativo es el valor positivo correspondiente, excepto en el caso especial del número más negativo. Por ejemplo, invertir los bits de −5 (arriba) da:

0000 01002

Y sumando uno da el valor final:

0000 01012
Did you mean:

Likewise, the two 's complement of zero is zero: inverting gives all ones, and adding one changes the ones back to zeros (since the overflow is ignored).

El complemento a dos del número más negativo representable (por ejemplo, un uno como el bit más significativo y todos los demás bits cero) es él mismo. Por lo tanto, hay un 'extra' número negativo para el cual el complemento a dos no da la negación, ver § Número más negativo a continuación.

Resta de 2N

La suma de un número y sus unidades' el complemento es una palabra de N bits con todos los bits 1, que es (que se lee como un número binario sin signo) 2N − 1. Luego, al agregar un número a su complemento a dos, los N bits más bajos se establecen en 0 y el bit de acarreo en 1, donde este último tiene el peso (leído como un número binario sin signo) de 2N. Por lo tanto, en la aritmética binaria sin signo, el valor del número negativo en complemento a dos x* de un x satisface la igualdad x* = 2N x.

Por ejemplo, para encontrar la representación de cuatro bits de −5 (los subíndices indican la base de la representación):

x = 510 por lo tanto, x = 01012

Por lo tanto, con N = 4:

x* = 2Nx = 24 − 510 = 1610 - 510 = 100002, 010−12 = 10112
Did you mean:

The calculation can be done entirely in base 10, conversion to base 2 at the end:

x* = 2Nx = 24 − 510 = 1110 = 10112

Trabajando desde LSB hacia MSB

Un atajo para convertir manualmente un número binario en su complemento a dos es comenzar en el bit menos significativo (LSB) y copiar todos los ceros, trabajando desde LSB hacia el bit más significativo (MSB) hasta el se alcanza el primer 1; luego copie ese 1 y cambie todos los bits restantes (deje el MSB como un 1 si el número inicial estaba en representación de signo y magnitud). Este atajo permite a una persona convertir un número en su complemento a dos sin formar primero sus unos. complementar. Por ejemplo: en la representación en complemento a dos, la negación de "0011 1100" es "1100 0100", donde los dígitos subrayados no cambiaron por la operación de copia (mientras que el resto de los dígitos se invirtieron).

En los circuitos informáticos, este método no es más rápido que el "complement and add one" método; ambos métodos requieren trabajar secuencialmente de derecha a izquierda, propagando cambios lógicos. El método de complementar y agregar uno puede acelerarse mediante un circuito sumador anticipado de acarreo estándar; el método LSB hacia MSB se puede acelerar mediante una transformación lógica similar.

Extensión del cartel

Repetición de bits en enteros de 7 y 8 bits usando el complemento de dos
Decimal Notación de 7 bits Notación de 8 bits
−4210101101101 0110
42010101010, 1010

Al convertir un número en complemento a dos con una cierta cantidad de bits en uno con más bits (por ejemplo, al copiar de una variable de un byte a una variable de dos bytes), el bit más significativo debe repetirse en todos los bits extra. Algunos procesadores hacen esto en una sola instrucción; en otros procesadores, se debe usar un condicional seguido de un código para establecer los bits o bytes relevantes.

Del mismo modo, cuando un número se desplaza a la derecha, se debe mantener el bit más significativo, que contiene la información del signo. Sin embargo, cuando se desplaza hacia la izquierda, se desplaza un poco hacia afuera. Estas reglas conservan la semántica común de que los desplazamientos a la izquierda multiplican el número por dos y los desplazamientos a la derecha dividen el número por dos. Sin embargo, si el bit más significativo cambia de 0 a 1 (y viceversa), se dice que se produce un desbordamiento en el caso de que el valor represente un entero con signo.

Tanto cambiar como duplicar la precisión son importantes para algunos algoritmos de multiplicación. Tenga en cuenta que, a diferencia de la suma y la resta, la extensión del ancho y el desplazamiento a la derecha se realizan de manera diferente para los números con y sin signo.

Número más negativo

Con una sola excepción, comenzando con cualquier número en la representación de complemento a dos, si se invierten todos los bits y se suma 1, se obtiene la representación de complemento a dos del negativo de ese número. El 12 positivo se convierte en 12 negativo, el 5 positivo se convierte en 5 negativo, el cero se convierte en cero (+desbordamiento), etc.

El complemento de los dos −128
−128 1000 0000
bits invertidos0111 1111
añadir uno1000 0000
Resultado es el mismo número binario de 8 bits.

Tomar el complemento a dos (negación) del número mínimo en el rango no tendrá el efecto deseado de negar el número. Por ejemplo, el complemento a dos de −128 en un sistema de ocho bits es −128, como se muestra en la mesa de la derecha. Aunque el resultado esperado de negar −128 es +128, no hay representación de + 128 con un sistema de complemento a dos de ocho bits y, por lo tanto, es imposible representar la negación. Tenga en cuenta que el complemento a dos, siendo el mismo número, se detecta como una condición de desbordamiento, ya que hubo un acarreo hacia el bit más significativo, pero no hacia afuera.

Tener un número distinto de cero igual a su propia negación es forzado por el hecho de que cero es su propia negación y que el número total de números es par. Prueba: hay 2^n - 1 números distintos de cero (un número impar). La negación dividiría los números distintos de cero en conjuntos de tamaño 2, pero esto daría como resultado que el conjunto de números distintos de cero tuviera una cardinalidad par. Entonces, al menos uno de los conjuntos tiene tamaño 1, es decir, un número distinto de cero es su propia negación.

La presencia del número más negativo puede provocar errores de programación inesperados en los que el resultado tiene un signo inesperado, una excepción de desbordamiento inesperada o comportamientos completamente extraños. Por ejemplo,

  • el operador de negación no deseado puede cambiar el signo de un número no cero. por ejemplo, −128) (donde)"se lee como "comidas").
  • una aplicación del valor absoluto puede devolver un número negativo; por ejemplo, abs(1−128) ⟼ −128.
  • Asimismo, multiplicación por −1 puede no funcionar como se espera; por ejemplo, (1−128) × (1) ⟼ −128.
  • División por −1 puede causar una excepción (como la causada por la división por 0 ); incluso calculando el resto (o modulo) −1 puede desencadenar esta excepción; por ejemplo, (1−28) [CRASH], (1−128) % (1) ⟼ [CRASH].

En los lenguajes de programación C y C++, los comportamientos anteriores no están definidos y no solo pueden arrojar resultados extraños, sino que el compilador es libre de asumir que el programador se ha asegurado de que las operaciones numéricas indefinidas nunca sucedan y hacer inferencias a partir de esa suposición.. Esto permite una serie de optimizaciones, pero también genera una serie de errores extraños en los programas con estos cálculos indefinidos.

Este número más negativo en complemento de dos a veces se llama #34;el número raro, porque es la única excepción. Aunque el número es una excepción, es un número válido en los sistemas regulares de complemento a dos. Todas las operaciones aritméticas funcionan con él como operando y (a menos que haya un desbordamiento) como resultado.

Por qué funciona

Dado un conjunto de todos los posibles valores de N-bit, podemos asignar la mitad inferior (por el valor binario) a sean los números enteros de 0 a (2N − 1 − 1) inclusive y la mitad superior sea −2N − 1 a −1 inclusive. La mitad superior (nuevamente, por el valor binario) puede usarse para representar enteros negativos de −2N − 1 a −1 porque, bajo módulo de suma 2N se comportan de la misma manera que esos enteros negativos. Es decir que porque i + j mod 2N = i + (j + 2N) módulo 2N cualquier valor en el conjunto { j + k 2N | k es un número entero }  se puede usar en lugar de j.

Por ejemplo, con ocho bits, los bytes sin signo van del 0 al 255. Restando 256 de la mitad superior (128 a 255) se obtienen los bytes con signo −128 a −1.

La relación con el complemento a dos se realiza observando que 256 = 255 + 1 y (255 − x) son las unidades' complemento de x.

Algunos números especiales
Decimal binario
1270111 1111
640100 0000
10000 0001
00000 0000
−11111 1111
−641100 0000
−1271000 0001
−1281000 0000

Ejemplo

En esta subsección, los números decimales están sufijados con un punto decimal ".

Por ejemplo, un número de 8 bits solo puede representar todos los enteros desde −128. a 127., inclusive, ya que (28 − 1 = 128.). −95. módulo 256. equivale a 161. ya que

95 - 256.
= −95. + 255. + 1
= 255. − 95. + 1
= 160. + 1.
= 161.
 1111 1111 255.
.
================================================================================================================================================================================================================================================================
1010 0000 (complemento de lana) 160.
+ 1 + 1
================================================================================================================================================================================================================================================================
1010 0001 (complemento de dos) 161.
2's complemento 4 bits de valores enteros
Complemento de dos Decimal
01117.
01106.
01015.
01004.
00113.
00102.
00011.
00000.
1111−1.
1110−2.
1101- 3.
11004.
1011- 5.
Graben 19, 1010- 6.
1001- 7.
10008.

Fundamentalmente, el sistema representa números enteros negativos contando hacia atrás y dando vueltas. El límite entre números positivos y negativos es arbitrario, pero por convención todos los números negativos tienen un bit más a la izquierda (bit más significativo) de uno. Por lo tanto, el número de cuatro bits más positivo es 0111 (7.) y el más negativo es 1000 (−8.). Debido al uso del bit más a la izquierda como bit de signo, el valor absoluto del número más negativo (|−8.| = 8.) es demasiado grande para representarlo. Negar un número en complemento a dos es simple: invierta todos los bits y agregue uno al resultado. Por ejemplo, al negar 1111, obtenemos 0000 + 1 = 1. Por lo tanto, 1111 en binario debe representar −1 en decimal.

El sistema es útil para simplificar la implementación de la aritmética en el hardware de la computadora. Agregar 0011 (3.) a 1111 (−1.) al principio parece dar la respuesta incorrecta de 10010. Sin embargo, el hardware puede simplemente ignorar el bit más a la izquierda para dar la respuesta correcta de 0010 (2.). Aún deben existir verificaciones de desbordamiento para capturar operaciones como sumar 0100 y 0100.

Por lo tanto, el sistema permite la suma de operandos negativos sin un circuito de resta o un circuito que detecte el signo de un número. Además, ese circuito de suma también puede realizar restas tomando el complemento a dos de un número (ver más abajo), lo que solo requiere un ciclo adicional o su propio circuito sumador. Para realizar esto, el circuito simplemente opera como si hubiera un bit adicional de 1 más a la izquierda.

Operaciones aritméticas

Adición

Sumar números en complemento a dos no requiere un procesamiento especial, incluso si los operandos tienen signos opuestos; el signo del resultado se determina automáticamente. Por ejemplo, sumando 15 y −5:

 0000 1111 (15)
+ 1111 1011 – 5)
============
0000 1010 (10)

O el cálculo de 5 − 15 = 5 + (−15):

 0000 0101 (5)
+ 1111 0001 (-15)
============
1111 0110 (−10)

Este proceso depende de la restricción a 8 bits de precisión; se ignora un acarreo al (inexistente) noveno bit más significativo, lo que da como resultado el resultado aritméticamente correcto de 1010.

Los dos últimos bits de la fila de acarreo (que se leen de derecha a izquierda) contienen información vital: si el cálculo resultó en un desbordamiento aritmético, un número demasiado grande para que lo represente el sistema binario (en este caso, más de 8 bits). Existe una condición de desbordamiento cuando estos dos últimos bits son diferentes entre sí. Como se mencionó anteriormente, el signo del número se codifica en el MSB del resultado.

En otros términos, si los dos bits de acarreo de la izquierda (los que se encuentran en el extremo izquierdo de la fila superior en estos ejemplos) son 1 o 0, el resultado es válido; si los dos bits de acarreo de la izquierda son "1 0" o "0 1", se ha producido un desbordamiento de señal. Convenientemente, una operación XOR en estos dos bits puede determinar rápidamente si existe una condición de desbordamiento. Como ejemplo, considere la adición de 4 bits con signo de 7 y 3:

 0111 (carry)
0111 (7)
+ 0011 (3)
======
1010 (−6) inválido!

En este caso, los dos bits de acarreo (MSB) del extremo izquierdo son "01", lo que significa que hubo un desbordamiento de suma de complemento a dos. Es decir, 10102 = 1010 está fuera del rango permitido de −8 a 7. El resultado sería correcto si se tratara como un entero sin signo.

En general, se pueden agregar dos números de N bits sin desbordamiento, primero extendiendo ambos a N + 1 bits, y luego agregando como se indica arriba. El resultado de N + 1 bits es lo suficientemente grande como para representar cualquier suma posible (N = 5 el complemento a dos puede representar valores en el rango −16 a 15), por lo que nunca se producirá un desbordamiento. Entonces es posible, si se desea, 'truncar' el resultado vuelve a N bits conservando el valor si y solo si el bit descartado es una extensión de signo adecuada de los bits de resultado retenidos. Esto proporciona otro método para detectar el desbordamiento, que es equivalente al método de comparar los bits de acarreo, pero que puede ser más fácil de implementar en algunas situaciones, porque no requiere acceso a las partes internas de la adición.

Sustracción

Las computadoras generalmente usan el método de los complementos para implementar la resta. El uso de complementos para restar está estrechamente relacionado con el uso de complementos para representar números negativos, ya que la combinación permite todos los signos de operandos y resultados; la resta directa también funciona con números en complemento a dos. Al igual que la suma, la ventaja de usar el complemento a dos es la eliminación de examinar los signos de los operandos para determinar si se necesita la suma o la resta. Por ejemplo, restar −5 de 15 es realmente sumar 5 a 15, pero esto está oculto por la representación del complemento a dos:

 11110 000 (borrow)
0000 1111 (15)
11 - 11 1011 - 5)
============
0001 0100 (20)

El desbordamiento se detecta de la misma manera que para la suma, examinando los dos bits más a la izquierda (más significativos) de los préstamos; se ha producido un desbordamiento si son diferentes.

Otro ejemplo es una operación de resta donde el resultado es negativo: 15 − 35 = −20:

 11100 000 (borrow)
0000 1111 (15)
− 0010 0011 (35)
============
1110 1100 (−20)

En cuanto a la suma, el desbordamiento en la resta puede evitarse (o detectarse después de la operación) extendiendo primero el signo de ambas entradas con un bit adicional.

Multiplicación

El producto de dos números de N-bit requiere 2N bits para contener todos los valores posibles.

Si la precisión de los dos operandos que usan el complemento a dos se duplica antes de la multiplicación, la multiplicación directa (descartando cualquier exceso de bits más allá de esa precisión) proporcionará el resultado correcto. Por ejemplo, tome 6 × (−5) = −30. Primero, la precisión se amplía de cuatro bits a ocho. Luego, los números se multiplican, descartando los bits más allá del octavo bit (como se muestra con "x"):

 00000110 (6)
* 11111011 (−5)
=============
110
1100
00000
110000
1100000
11000
x10000000
+ xx00000
=============
xx11100010

Esto es muy ineficiente; al duplicar la precisión antes de tiempo, todas las adiciones deben ser de doble precisión y se necesitan al menos el doble de productos parciales que para los algoritmos más eficientes implementados en las computadoras. Algunos algoritmos de multiplicación están diseñados para complemento a dos, en particular el algoritmo de multiplicación de Booth. Los métodos para multiplicar números de magnitud de signo no funcionan con números en complemento a dos sin adaptación. Por lo general, no hay problema cuando el multiplicando (el que se suma repetidamente para formar el producto) es negativo; el problema es configurar correctamente los bits iniciales del producto cuando el multiplicador es negativo. Son comunes dos métodos para adaptar algoritmos para manejar números en complemento a dos:

  • Primer cheque para ver si el multiplicador es negativo. Si es así, negate (i.e., tomar el complemento de los dos) ambos operandos antes de multiplicarse. El multiplicador será positivo para que el algoritmo funcione. Debido a que ambos operandos son negados, el resultado todavía tendrá la señal correcta.
  • Subir el producto parcial resultante de la MSB (pseudo bit) en lugar de añadirlo como los otros productos parciales. Este método requiere que el bit de signos de multiplicación se extienda por una posición, siendo preservado durante las acciones correctas del turno.

Como ejemplo del segundo método, tome el algoritmo común de suma y desplazamiento para la multiplicación. En lugar de desplazar los productos parciales hacia la izquierda como se hace con papel y lápiz, el producto acumulado se desplaza hacia la derecha, en un segundo registro que finalmente contendrá la mitad menos significativa del producto. Dado que los bits menos significativos no se modifican una vez que se calculan, las adiciones pueden ser de precisión simple, acumulándose en el registro que eventualmente contendrá la mitad más significativa del producto. En el siguiente ejemplo, al multiplicar nuevamente 6 por −5, los dos registros y el bit de signo extendido están separados por "|":

 0 0110 (6) (multiplicando con bit de signo extendido)
× 1011 (−5) (multiplier)
= Subsidio===
0 habit0110 habit0000 (primer producto parcial (la parte más justa es 1))
0 sometida0011 sometida0000 (derecho, preservando bit de signo extendido)
0 habit1001 habit0000 (segundo producto parcial (segundo bit es 1))
0 sometida0100 sometida1000 (derecho, preservando el bit de signo extendido)
0 habit0100 habit1000 (add third partial product: 0 so no change)
0 sometida0010 sometida0100 (derecho, preservando bit de signo extendido)
1 duración1100 vidas0100 (sutracto último producto parcial ya que es de bit de signo)
1 turba 1110 turbación0010 (derecho, preservando el bit de signo extendido)
TEN1110 SUPERVISIÓN0010 (descarte la señal extendida, dando la respuesta final, −30)

Comparación (ordenación)

La comparación a menudo se implementa con una resta ficticia, donde se verifican las banderas en el registro de estado de la computadora, pero se ignora el resultado principal. La bandera cero indica si dos valores comparados son iguales. Si el o exclusivo de las banderas de signo y desbordamiento es 1, el resultado de la resta fue menor que cero, de lo contrario, el resultado fue cero o mayor. Estas verificaciones a menudo se implementan en computadoras en instrucciones de bifurcación condicional.

Los números binarios sin signo se pueden ordenar mediante un ordenamiento lexicográfico simple, donde el valor de bit 0 se define como menor que el valor de bit 1. Para los valores de complemento a dos, el significado del bit más significativo se invierte (es decir, 1 es menor que 0).

El siguiente algoritmo (para una arquitectura de complemento a dos n-bit) establece el registro de resultado R en − 1 si A < B, a +1 si A > B, y a 0 si A y B son iguales:

// comparación inversa del bit de señalsi A()n-1) == 0 y B()n-1) == 1 entonces retorno +1más si A()n-1) == 1 y B()n-1) == 0 entonces retorno -1final // comparación de los bits restantespara i = n-2...0 do si A()i) == 0 y B()i) == 1 entonces retorno -1 más si A()i) == 1 y B()i) == 0 entonces retorno +1  finalfinal retorno 0
Did you mean:

Two 's complement and 2-adic numbers

En un HAKMEM clásico publicado por el MIT AI Lab en 1972, Bill Gosper señaló que si la representación interna de una máquina era o no complemento a dos podía determinarse mediante sumando las potencias sucesivas de dos. En un vuelo de fantasía, señaló que el resultado de hacer esto algebraicamente indicaba que "el álgebra se ejecuta en una máquina (el universo) que es complemento a dos".

La conclusión final de Gosper no necesariamente debe tomarse en serio y es similar a una broma matemática. El paso crítico es "...110 =...111 − 1", es decir, "2X = X − 1&# 34;, y por tanto X =...111 = −1. Esto presupone un método por el cual una cadena infinita de 1 se considera un número, lo que requiere una extensión de los conceptos de valor posicional finito en la aritmética elemental. Es significativo ya sea como parte de una notación de complemento a dos para todos los números enteros, como un número ádico de 2 típico, o incluso como una de las sumas generalizadas definidas para las series divergentes de números reales 1 + 2 + 4 + 8 + ···. Los circuitos aritméticos digitales, idealizados para operar con cadenas de bits infinitas (que se extienden a potencias positivas de 2), producen sumas y multiplicaciones ádicas de 2 compatibles con la representación de complemento a dos. La continuidad de las operaciones aritméticas binarias y bit a bit en la métrica 2-ádica también tiene algún uso en criptografía.

Conversión de fracciones

Para convertir un número con una parte fraccionaria, como.0101, uno debe convertir de derecha a izquierda los 1 a decimal como en una conversión normal. En este ejemplo, 0101 es igual a 5 en decimal. Cada dígito después del punto flotante representa una fracción donde el denominador es un multiplicador de 2. Entonces, el primero es 1/2, el segundo es 1/4 y así sucesivamente. Habiendo ya calculado el valor decimal como se mencionó anteriormente, solo se usa el denominador del LSB (LSB = comenzando desde la derecha). El resultado final de esta conversión es 5/16.

Por ejemplo, teniendo el valor flotante de.0110 para que este método funcione, uno no debe considerar el último 0 de la derecha. Por lo tanto, en lugar de calcular el valor decimal de 0110, calculamos el valor 011, que es 3 en decimal (dejando el 0 al final, el resultado hubiera sido 6, junto con el denominador 24 = 16, que se reduce a 3/8). El denominador es 8, dando un resultado final de 3/8.

Contenido relacionado

Telecomunicaciones en Mauricio

En 1883, se introdujo la telefonía básica en Mauricio, solo siete años después de la invención del teléfono. Se instaló la primera línea telefónica...

Comunicaciones en Malaui

Comunicaciones en Malawi incluye los servicios postales, telefónicos, de televisión, radio e Internet del...

Telecomunicaciones en Georgia (país)

Las telecomunicaciones en Georgia incluyen radio, televisión, teléfonos fijos y móviles e...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save