Pregunta

Estoy en un equipo en el curso de sistemas y se han luchando, en parte, con Complemento a dos.Quiero entender, pero todo lo que he leído no ha traido la foto juntos para mí.He leído el artículo de la wikipedia y varios otros artículos, incluyendo mi libro de texto.

Por lo tanto, yo quería empezar este wiki de la comunidad post para definir qué Complemento a Dos es, cómo usarlo y cómo puede afectar a los números durante las operaciones como de los yesos (de firmado a los sin firmar y viceversa), bit a bit de las operaciones y de los bits de las operaciones del turno.

Lo que estoy esperando es una definición clara y concisa que sea fácil de entender por un programador.

¿Fue útil?

Solución

complemento

Two es una forma inteligente de almacenamiento de números enteros para que los problemas comunes de matemáticas son muy simples de implementar.

Para entender, hay que pensar en los números en binario.

Básicamente dice,

  • para el cero, utilice todos 0 de.
  • para números enteros positivos, comience a contar hacia arriba, con un máximo de 2 (número de bits - 1). -1
  • para los enteros negativos, hacen exactamente lo mismo, pero cambiar el papel de 0 y 1. (lo que en lugar de partir de 0000, a empezar con 1111 - esa es la parte "complemento").

Vamos a intentarlo con un mini-byte de 4 bits (lo llamaremos un mordisco -. 1/2 un byte)

  • 0000 - cero
  • 0001 - uno
  • 0010 - dos
  • 0011 - tres
  • 0100 a 0111 - seis y cincuenta y seis

Eso es todo lo que podemos llegar en positivos. 2 3 -1 = 7.

Para negativos:

  • 1111 - uno negativo
  • 1110 - negativo dos
  • 1101 - negativa de tres
  • 1100 a 1000 - cuatro negativo a negativo ocho

Tenga en cuenta que se obtiene un valor adicional para los negativos (1 = -8) que no lo hace para los positivos. Esto se debe a 0 se utiliza para el cero. Esto puede ser considerado como Número de línea de los ordenadores.

Distinguir entre números positivos y negativos

Al hacer esto, el primer bit tiene la función del bit de "firmar", ya que se puede utilizar para distinguir entre valores decimales positivos y negativos. Si el bit más significativo es <=>, entonces el binario puede decirse que es negativo, en tanto que si el bit más significativo (más a la izquierda) es <=>, se puede decir discernir el valor decimal es positivo.

"Uno de elogio" números negativos simplemente invierte el bit de signo, a continuación, que cuenta desde 0. Sin embargo, este enfoque tiene que lidiar con la interpretación de <=> como "cero negativo", que es confuso. Por lo general, sólo tiene que preocuparse por esto cuando se trabaja cerca del hardware.

Otros consejos

Me pregunto si se podría explicar mejor que el artículo de Wikipedia.

El problema básico que está tratando de resolver con la representación de complemento a dos es el problema del almacenamiento de números enteros negativos.

Primero considerar un entero sin signo almacenado en 4 bits. Puede tener la siguiente

0000 = 0
0001 = 1
0010 = 2
...
1111 = 15

Estos son sin signo porque no hay ninguna indicación de si son negativo o positivo.

Magnitud Firme y exceso de notación

Para almacenar los números negativos se puede tratar una serie de cosas. En primer lugar, se puede utilizar una notación de magnitudes signo que asigna el primer bit como bit de signo para representar +/- y el resto de bits para representar la magnitud. Así, utilizando 4 bits de nuevo, y suponiendo que 1 significa - y 0 + medios entonces usted tiene

0000 = +0
0001 = +1
0010 = +2
...
1000 = -0
1001 = -1
1111 = -7

Por lo tanto, se ve el problema allí? Tenemos positivo y negativo 0. El problema más grande es la suma y resta de números binarios. Los circuitos para sumar y restar usando magnitud señal va a ser muy compleja.

¿Qué es

0010
1001 +
----

Otro sistema es exceso notación . Puede almacenar los números negativos, a deshacerse del problema dos ceros, pero la suma y resta sigue siendo difícil.

Así que adelante viene complemento a dos. Ahora puede almacenar números enteros positivos y negativos y realizar operaciones aritméticas con relativa facilidad. Hay una serie de métodos para convertir un número en complemento a dos. Aquí hay uno.

Convertir a decimal complemento a dos

  1. Convertir el número a binario (ignore la señal por ahora) p.ej. 5 es 0101 y -5 es 0101

  2. Si el número es un número positivo, entonces ya está. p.ej. 5 es 0101 en binario utilizando dos en dos notación de complemento.

  3. Si el número es negativo, entonces

    3.1 encontrar el complemento (invertido 0 y 1.)  p.ej. -5 es 0101 por lo que encontrar el complemento es 1010

    3.2 Añadir 1 al complemento 1,010 + 1 = 1011.      Por lo tanto, -5 en complemento a dos es 1011.

Así que, si lo que quería hacer 2 + (-3) en binario? 2 + (-3) es -1. ¿Qué hay que hacerlo si estuviera usando magnitud señal para añadir estos números? 0010 + 1101 =?

Uso de complemento a dos en cuenta lo fácil que sería.

 2  =  0010
 -3 =  1101 +
 -------------
 -1 =  1111

Conversión de complemento de dos a decimal

La conversión de 1.111 a decimales:

  1. El número comienza con 1, por lo que es negativo, por lo que nos encontramos con el complemento de 1111, que es 0000.

  2. Agrega 1 a 0000 y obtenemos 0001.

  3. Convertir 0001 a decimal, que es 1.

  4. Aplicar el signo = -1.

Tada!

Al igual que la mayoría de las explicaciones que he visto, los de arriba son claras acerca de cómo trabajar con complemento a 2, pero realmente no explican lo que son matemáticamente. Voy a tratar de hacer eso, por lo menos enteros, y voy a cubrir algunos antecedentes que es probablemente familiar en primer lugar.

Recordemos cómo funciona para decimales:
2345
es una manera de escribir
2 x 10 3 + 3 x 10 2 + 4 x 10 1 + 5 x 10 < sup> 0 .

De la misma manera, binaria es una forma de escribir números utilizando sólo 0 y 1 siguiendo la misma idea general, pero sustituyendo los 10 segundos más arriba con 2s. A continuación, en binario, España 1111
es una manera de escribir
1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0 Opiniones y si se trabaja a cabo, que resulta igual a 15 (de base 10). Eso es porque es
8 + 4 + 2 + 1 = 15.

Esto es todo bien y bueno para los números positivos. También funciona para los números negativos si está dispuesto a atenerse sólo un signo menos delante de ellos, como lo hacen los humanos con los números decimales. Que incluso se puede hacer en las computadoras, más o menos, pero no he visto una computadora tal desde principios del año 1970. Voy a dejar las razones para una discusión diferente.

Para los equipos que resulta ser más eficaz utilizar un complementar representación para números negativos. Y aquí hay algo que a menudo se pasa por alto. notaciones del complemento implican algún tipo de inversión de los dígitos del número de ceros, incluso los implícitos que se presentan ante un número positivo normal. Eso es difícil, porque surge la pregunta: todos ellos? Eso podría ser un número infinito de dígitos a ser considerado.

Afortunadamente, las computadoras no representan infinitos. Los números están limitados a una longitud particular (o anchura, si lo prefiere). Así que vamos a volver a los números binarios positivos, pero con un tamaño determinado. Voy a usar 8 dígitos ( "bits") para estos ejemplos. Por lo que nuestro número binario sería realmente
00001111
o
0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0

Para formar el complemento a 2 negativos, primero complementar todos los dígitos (binarios) para formar
11110000 Opiniones y añadimos 1 para formar
11110001
pero ¿cómo hemos de entender que significa a -15?

La respuesta es que cambiamos el significado del bit de orden superior (el extremo izquierdo). Este bit será un 1 para todos los números negativos. El cambio será para cambiar el signo de su contribución al valor del número que aparece en lo que ahora nuestra 11110001 se entiende que representan
-. 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0
en cuenta que "-" delante de esa expresión? Esto significa que el bit de signo lleva el peso -2 7 , es decir -128 (base 10). Todas las otras posiciones conservan el mismo peso que tenían en números binarios sin signo.

La elaboración de nuestra -15, es
+ 64 + -128 32 + 16 + 1 Usa Inténtelo en su calculadora. es -15.

De las tres formas principales que he visto números negativos representados en las computadoras, complemento a 2 gana las manos abajo para mayor comodidad de uso general. Tiene una rareza, sin embargo. Puesto que es binario, tiene que haber un número par de posibles combinaciones de bits. Cada número positivo se puede combinar wiº su negativo, pero sólo hay un cero. Negando un cero que se pone a cero. Por lo tanto hay una mayor combinación, con el número 1 en el bit de signo y 0 en cualquier otro lugar. El número positivo correspondiente no encajaría en el número de bits que se utiliza.

Lo que es aún más extraño en este número es que si se intenta formar su positivo complementando y añadiendo uno, se obtiene el mismo número de negativos. Parece natural que cero haría esto, pero esto es inesperado y no en todo el comportamiento que estamos acostumbrados a un lado porque las computadoras, por lo general piensan de un suministro ilimitado de dígitos, no esta de longitud fija aritmética.

Esto es como la punta de un iceberg de rarezas. Hay más al acecho debajo de la superficie, pero eso es suficiente para esta discusión. Probablemente se podría encontrar más si la investigación "desbordamiento" de aritmética de punto fijo. Si realmente quiere entrar en ella, también puede investigar "la aritmética modular".

complemento a 2 es muy útil para encontrar el valor de una binaria, sin embargo pensé en una forma mucho más concisa de la solución de un problema de este tipo (nunca visto a nadie más publico):

tomar un binario, por ejemplo: 1101 que está [suponiendo que el espacio "1" es el signo] igual a -3 .

utilizando el complemento a 2 podríamos hacer esto ... flip 1101 a 0010 ... añadir 0001 + 0010 ===> nos da 0011. 0011 en binario positivo = 3. Por consiguiente, 1101 = -3 !

Lo que me di cuenta:

en lugar de todo el volteo y la adición, que sólo puede hacer el método básico para la solución de un binario positivo (digamos 0101) es (2 3 * 0) + (2 2 * 1) + (2 1 * 0) + (2 0 * 1) = 5.

Hacer exactamente el mismo concepto con un negativo! (Con un pequeño giro)

tomar 1101, por ejemplo:

para el primer número en lugar de 2 3 * 1 = 8 , hacer - (2 3 * 1) = - 8 .

luego continuar como de costumbre, haciendo -8 + (2 2 * 1) + (2 1 * 0) + (2 < sup> 0 * 1) = -3

Imagine que tiene un número finito de bits / trits / dígitos / lo que sea. Se define como todos los dígitos 0 es 0, y contar hacia arriba de forma natural:

00
01
02
..

Finalmente se desbordará.

98
99
00

Tenemos dos dígitos y puede representar todos los números del 0 al 100. Todos los números son positivos! Supongamos que queremos representar números negativos también?

Lo que realmente tenemos es un ciclo. El número antes del 2 es 1. El número antes de 1 es 0. El número 0 es antes ... 99 .

Así que, para simplificar, digamos que cualquier número de más de 50 es negativo. "0" a "49" representan de 0 a 49. "99" es -1, "98" es -2, ... "50" es -50.

Esta representación es de diez complemento . Ordenadores suelen utilizar complemento a dos , que es el mismo, excepto utilizando bits en lugar de dígitos.

Lo bueno de complemento a diez es que la adición simplemente funciona . No es necesario hacer nada especial para agregar números positivos y negativos!

Dos complemento se descubrió sumando uno al complemento 1'st del número dado. Digamos que tenemos que averiguar complemento a dos de 10101 continuación, encuentran su complemento a uno, es decir, añadir 01010 1 a este resultado, es decir, 01010+1=01011, que es la respuesta final.

leí una explicación fantástica rel="noreferrer"> por JNG, utilizando el odómetro como una analogía.

 introducir descripción de la imagen aquí

  

Es una convención útil. Los mismos circuitos y operaciones lógicas que   añadir / restar números positivos en binario todavía trabajar tanto en positivo   y los números negativos si se utiliza la convención, es por eso que es tan   útil y omnipresente.

     

Imagínese el cuentakilómetros de un automóvil, que rueda alrededor en (digamos) 99999. Si   00000 incremento se obtiene 00001. Si decrementas 00000, se obtiene 99999   (Debido a la puesta en alrededor). Si se agrega un nuevo a 99999 se remonta a   00000. Por lo tanto, es útil para decidir que representa 99999 -1. Del mismo modo, es muy útil para decidir que representa 99998 -2, y así sucesivamente. Tienes   parar en algún sitio, y también por convención, la mitad superior de los números   se considera que ser negativa (50000 a 99999), y la parte inferior un medio positivo   acaba de presentarse a sí mismos (00000-49999). Como resultado, el dígito superior   siendo 5-9 significa el número representado es negativo, y que sea 0-4   significa que el representado es positivo - exactamente el mismo que el bit superior   en representación de signo en número binario de complemento a dos.

     

Entender esto fue difícil para mí también. Una vez que llegué y fui de nuevo a   volver a leer los artículos de libros y explicaciones (no había internet   en ese entonces), resultó una gran cantidad de los que describen que en realidad no   entiendelo. He escrito un lenguaje ensamblador libro después de la enseñanza   que (que se vendió bastante bien durante 10 años).

Permite obtener la respuesta 10 - 12 en forma binaria utilizando 8 bits: Lo que realmente haremos es 10 + (-12)

Tenemos que llegar a la parte cumplido de 12 a restar de 10. 12 en binario es 00001100. 10 en binario es 00001010.

Para conseguir el papel cumplido 12 que acabamos de revertir todos los bits a continuación, añadir 1. 12 en binario invertido es 11110011. Este es también el código inverso (complemento a uno). Ahora tenemos que añadir uno, que ahora es 11110100.

Así 11110100 es el complemento de 12! Fácil cuando se piensa de esta manera.

Ahora se puede resolver la cuestión anterior de 10 -. 12 en forma binaria

00001010
11110100
-----------------
11111110  

En cuanto a sistema de complemento a dos, desde un punto de vista matemático que realmente tiene sentido. En el complemento a diez, la idea es esencialmente 'aislar' la diferencia.

Ejemplo: 63 - 24 = x

Añadimos el complemento de 24, que es en realidad (100 - 24). Así que en realidad, lo único que hacemos es añadir 100 en ambos lados de la ecuación.

Ahora la ecuación es:. 100 + 63 - 24 = x + 100, es por eso eliminamos la 100 (o 10 o 1000 o lo que sea)

Debido a la situación inconveniente de tener que restar un número de una larga cadena de ceros, se utiliza un sistema de 'radix disminuido complemento', en el sistema decimal, de nueve complemento.

Cuando se nos presenta un número restado de una gran cadena de nueves, sólo tenemos que revertir los números.

Ejemplo: 99.999 hasta 03.275 = 96.724

Esa es la razón, después de complemento a nueve, le sumamos 1. Como usted probablemente sabe de matemáticas niñez, 9 se convierte en el 10 por 'robo' 1. Así que básicamente es sólo de diez complemento que toma 1 de la diferencia.

En binario, el complemento a dos es equiparable a la de complemento a diez, mientras que uno de complemento de complemento a nueve. La principal diferencia es que en lugar de intentar aislar la diferencia con potencias de diez (adición de 10, 100, etc. en la ecuación) que estamos tratando de aislar la diferencia con potencias de dos.

Es por esta razón por la que invertimos los bits. Al igual que cómo nuestra minuendo es una cadena de nueves en decimal, nuestra minuendo es una cadena de unos en binario.

Ejemplo: 111111 a 101001 = 010110

Debido a que las cadenas de cuáles son 1 por debajo de un buen poder de dos, 'robar' 1 de la diferencia como nueve a hacer en decimal.

Cuando estamos utilizando de número binario negativo, en realidad estamos diciendo simplemente:

0000 - 0101 = x

1111 - 0101 = 1010

1111 + 0000-0101 = x + 1111

Con el fin de 'aislar' x, tenemos que añadir 1 porque 1111 es uno de distancia de 10000 y quitamos el principal 1 porque acabamos de agregar a la diferencia inicial.

1111 + 1 + 0.000-0.101 = x + 1111 + 1

10.000 + 0.000 a 0101 = x + 10 000

Basta con retirar 10.000 de ambos lados para obtener x, es el álgebra básica.

Muchas de las respuestas hasta el momento muy bien explicar por qué complemento a dos se utiliza para representar números negativos, pero no nos dice qué número complemento a dos es, sobre todo, no por eso se añade un '1', y de hecho a menudo se añade en una equivocada camino.

La confusión proviene de una mala comprensión de la definición de un número complementario. Un complemento es la parte que falta que haría algo completo.

El complemento radix de un número n dígitos x en radix b es, por definición, b ^ n-x. En binario 4 es representa por 100, que tiene 3 dígitos (n = 3) y un radix de 2 (b = 2). Así su complemento radix es b ^ n-x = 2 ^ 3-4 = 8-4 = 4 (o 100 en binario).

Sin embargo, en binario la obtención de complemento de un radix no es tan fácil como conseguir la disminución de su complemento radix, que se define como (^ n-1 b) -Y, a sólo 1 menor que la de complemento radix. Para obtener un complemento radix disminuido, simplemente da la vuelta a todos los dígitos.

100 -> 011 (disminución (de uno) radix complemento)

para obtener el radix (de dos) del complemento, que sólo tiene que añadir 1, ya que la definición definida.

011 1 -.> 100 (complemento a dos)

Ahora, con esta nueva comprensión, vamos a echar un vistazo del ejemplo dado por Vicente Ramdhanie (véase más arriba segunda respuesta)

/ * comienzo de Vicente

La conversión de 1.111 a decimales:

El número comienza con 1, por lo que es negativo, por lo que nos encontramos con el complemento de 1111, que es 0000. Agrega 1 a 0000 y obtenemos 0001. Convertir a 0001 decimal, que es 1. Aplicar el signo = -1. Tada!

final de Vicente * /

debe entenderse como

El número comienza con 1, por lo que es negativo. Por lo que sabemos que es el complemento de algún valor x de dos. Para encontrar las x representados por el complemento a sus dos, primero necesitamos encontrar su complemento a 1.

complemento de x de dos: 1111 el complemento a uno de x: 1111-1 -> 1110; x = 0,001, (flip todos los dígitos)

solicite el signo -, y la respuesta = -x = -1.

Me gustó la respuesta de lavinio, pero cambiando los bits añade algo de complejidad. A menudo hay una opción de mover los bits respetando el bit de signo o mientras no respetar el bit de signo. Esta es la elección entre el tratamiento de los números como firmado (-8 a 7 para un mordisco, -128-127 para bytes) o de rango completo números sin signo (0 a 15 para picar, de 0 a 255 para bytes).

Es un medio inteligentes de codificación de números enteros negativos de tal manera que aproximadamente la mitad de la combinación de bits de un tipo de datos se reservan para enteros negativos, y la adición de la mayoría de los enteros negativos con su enteros resultados positivos en correspondientes un acarreo de desbordamiento que deja que el resultado sea cero binario.

Así, en complemento a 2 si uno es 0x0001 entonces -1 es 0x1111, porque que se traducirá en una suma combinada de 0x0000 (con un desbordamiento de 1).

Complementos de 2: Cuando añadimos un extra con complementos de un número del 1 obtendremos complementos del 2. Por ejemplo: 100 101 es de 1 complemento es 011.010 y el complemento a 2 es 011.010 + 1 = 011,011 (añadiendo uno con el complemento de 1) Para más información este artículo a explicar gráficamente.

Yo tenía el mismo problema hace un par de semanas. Terminé de leer sobre él en línea de varias fuentes, tratando de poner las piezas juntas, y escribir sobre mí mismo sólo para asegurarse de que lo entendí correctamente. Utilizamos el complemento a dos para dos razones principales:

  1. Para evitar múltiples representaciones de 0
  2. Para evitar hacer el seguimiento de bit de acarreo (como en uno de complemento) en el caso de un desbordamiento.
  3. Llevar a cabo operaciones simples como la suma y la resta se convierte en fácil.

Si desea una explicación más detallada de la materia que nos ocupa, probar el artículo escrito por mí aquí . Espero que ayude!

La palabra complementar deriva de la integridad.En el decimal mundo de los números del 0 al 9 proporcionar un complemento (serie completa) de números o símbolos numéricos para expresar todos los números decimales.En el mundo binario de los números 0 y 1 de complemento de los números para expresar todos los números binarios.De hecho, Los símbolos 0 y 1 debe ser utilizado para representar todo (texto, imágenes, etc), así como los positivos (0) y negativo (1).En nuestro mundo el espacio en blanco a la izquierda del número que se considera como cero:

                  35=035=000000035.

En un equipo en el lugar de almacenamiento no hay ningún espacio en blanco.Todos los bits (dígitos binarios) debe ser 0 o 1.De utilizar eficazmente los números de memoria puede ser almacenado como 8 bits, 16 bits, 32 bits, 64 bits, 128 bits representaciones.Cuando un número se almacena como un 8 número de bits que se transfiere a un 16 bits el signo y la magnitud (valor absoluto) debe ser el mismo.Tanto en complemento a 1 y complemento a 2 representaciones facilitar esto.Como sustantivo:Tanto en complemento a 1 y complemento a 2 son las representaciones binarias de firmado cantidades donde el bit más significativo (el de la izquierda) es el bit de signo.0 es positivo y 1 negativo.2s complemento no significa negativa.Esto significa una firma de cantidad.Como en decimal de la magnitud se representa como la cantidad positiva.La estructura de usos de firmar la extensión de conservar la cantidad a la hora de fomentar un registro [] con más bits:

       [0101]=[00101]=[00000000000101]=5 (base 10)
       [1011]=[11011]=[11111111111011]=-5(base 10)

Como un verbo:Complemento a 2 medios para negar.Esto no significa hacer negativo.Esto significa que si la negativa positiva;si es positivo hacer negativo.La magnitud es el valor absoluto:

        if a >= 0 then |a| = a
        if a < 0 then |a| = -a = 2scomplement of a

Esta capacidad permite una binaria resta usando negar, a continuación, en agregar.a - b = a + (-b)

El camino oficial para tomar el complemento a 1 es para cada dígito restar su valor de 1.

        1'scomp(0101) = 1010.

Este es el mismo que voltear o invertir cada bit individual.Esto se traduce en una negativa cero que no es muy querido por lo que la adición de uno a te complemento a 1 se deshace del problema.Para negar o complemento toman el 2s primero el 1s complemento, a continuación, añadir 1.

        Example 1                             Example 2
         0101  --original number              1101
         1's comp  1010                       0010
         add 1     0001                       0001
         2's comp  1011  --negated number     0011

En los ejemplos de la negación funciona igual de bien con signo extendido números.

Añadiendo:
1110 Llevar 111110 Llevar 0110 es el mismo que 000110 1111 111111 suma 0101 suma 000101

Restando:

    1110  Carry                      00000   Carry
     0110          is the same as     00110
    -0111                            +11001
  ----------                        ----------
sum  0101                       sum   11111

Observe que cuando se trabaja con complemento a 2, espacio en blanco a la izquierda del número está lleno de ceros para números positivos butis lleno de aquellos para los números negativos.El llevar siempre es añadido y debe ser un 1 o un 0.

Saludos

REFERENCIA: https: //www.cs.cornell. edu / ~ tomf / notas / cps104 / twoscomp.html

Yo invierto todos los bits y añadir 1. programación:

  // in C++11
  int _powers[] = {
      1,
      2,
      4,
      8,
      16,
      32,
      64,
      128
  };

  int value=3;
  int n_bits=4;
  int twos_complement = (value ^ ( _powers[n_bits]-1)) + 1;

complemento de un número determinado de 2 es el no. conseguido mediante la adición de 1 con el complemento a 1 del no. supongamos, no tenemos una binaria .: 10111001101 Es de 1 complemento es: 01000110010 Y es complemento a 2 será: 01000110011

Para complementar modo bit es un número voltear todos los bits en el mismo. A las dos de la complementan, que tapa todos los bits y agregue.

Uso de representación de complemento a 2 para los enteros con signo, aplicamos la operación de complemento a 2 para convertir un número positivo a su equivalente negativo y viceversa. Así, utilizando mordiscos por ejemplo, 0001 (1) se convierte en 1111 (-1) y la aplicación de la op de nuevo, vuelve a 0000.

El comportamiento de la operación en el cero es ventajoso en dar una representación única de cero sin manipulación especial de ceros positivos y negativos. 0001 + 1111 complementa a <=>, que cuando se añade 1. desborda a <=>, que nos da un cero, en lugar de una positiva y una negativa.

Una ventaja clave de esta representación es que los circuitos de adición de patrón de enteros sin signo producen resultados correctos cuando se aplica a ellos. Por ejemplo la adición de 1 y -1 en mordiscos: <=>, los bits de desborde fuera del registro, dejando atrás <=>.

Para una suave introducción, la maravillosa Computerphile han producido una sobre el tema .

complemento

de 2 es esencialmente una forma de dar con el inverso aditivo de un número binario. Pregúntese lo siguiente: Dado un número en formato binario, lo patrón de bits, cuando se añade al número original, haría que el resultado de cero? Si uno se puede topar con este patrón de bits entonces ese patrón de bits es la representación -ve (aditivo inverso) del número original; ya que por definición la adición de un número a su inverso aditivo siempre debe resultar en cero. Ejemplo: tomar 101, que es decimal 5. Ahora la tarea es para llegar a un patrón de bits que cuando se añade al patrón de bits dada (101) resultaría en cero. Para hacer eso, empezar desde el derecho más de 101 bits y para cada bit individual, otra vez la misma pregunta: ¿Qué bits debería añadir a "este" poco para que el resultado de cero? continuar haciendo que la toma en cuenta la costumbre los remanentes. Después de que haya terminado con la derecha 3 mayoría de los lugares (los dígitos que definen el número original sin tener en cuenta los ceros a la izquierda) el último acarreo va en el patrón de bits del inverso aditivo. Además, puesto que podríamos estar celebrando en el número original en, digamos, un solo byte, todos los demás bits iniciales en el inverso aditivo deben también ser de 1 de modo que cuando el equipo se suma el número y su inverso aditivo utilizando "que" el tipo de almacenamiento (char) el resultado en ese carbón sería todo ceros.

 1 1 1
 ----------
   1 0 1
 1 0 1 1 ---> additive inverse
  ---------
   0 0 0

También puede utilizar una calculadora en línea para calcular la representación binaria de complemento a dos de un número decimal: http://www.convertforfree.com/twos-complement-calculator/

La respuesta más simple:

1111 + 1 = (1) 0000. Así que 1111 debe ser -1. Entonces -1 + 1 = 0.

Es perfecto para entender estos todo para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top