Después de de esta extensa compilación de datos pudimos resolver esta obstáculo que suelen tener muchos los lectores. Te brindamos la respuesta y deseamos que te resulte de gran ayuda.
Solución:
El complemento a dos es una forma inteligente de almacenar números enteros para que los problemas matemáticos comunes sean muy simples de implementar.
Para entender, debes pensar en los números en binario.
Básicamente dice
- para cero, utilice todos los ceros.
- para números enteros positivos, comience a contar, con un máximo de 2(número de bits – 1)-1.
- para enteros negativos, haga exactamente lo mismo, pero cambie el papel de 0 y 1 (por lo tanto, en lugar de comenzar con 0000, comience con 1111, esa es la parte del “complemento”).
Probémoslo con un minibyte de 4 bits (lo llamaremos nibble – 1/2 byte).
0000
– cero0001
– uno0010
– dos0011
– Tres0100
para0111
– cuatro a siete
Eso es todo lo que podemos llegar en aspectos positivos. 23-1 = 7.
Para negativos:
1111
– uno negativo1110
– dos negativos1101
– tres negativos1100
para1000
– cuatro negativos a ocho negativos
Tenga en cuenta que obtiene un valor adicional para los negativos (1000
= -8) que no lo hace por lo positivo. Esto es porque 0000
se utiliza para cero. Esto se puede considerar como una línea numérica de computadoras.
Distinguir entre números positivos y negativos
Al hacer esto, el primer bit asume el papel del bit de “signo”, ya que se puede usar para distinguir entre valores decimales negativos y no negativos. Si el bit más significativo es 1
, entonces se puede decir que el binario es negativo, donde como si el bit más significativo (el más a la izquierda) fuera 0
, puede decir que el valor decimal no es negativo.
Los números negativos de “magnitud de signo” solo tienen el bit de signo invertido de sus contrapartes positivas, pero este enfoque tiene que lidiar con la interpretación 1000
(uno 1
seguido por todos 0
s) como “cero negativo”, lo cual es confuso.
Los números negativos del “complemento de uno” son solo el complemento de bits de sus contrapartes positivas, lo que también conduce a un “cero negativo” confuso con 1111
(todos unos).
Es probable que no tenga que lidiar con representaciones enteras de Complemento de Uno o Magnitud de signo a menos que esté trabajando muy cerca del hardware.
Me pregunto si podría explicarse mejor que el artículo de Wikipedia.
El problema básico que está tratando de resolver con la representación del complemento a dos es el problema de almacenar números enteros negativos.
Primero, considere un entero sin signo almacenado en 4 bits. Puedes tener lo siguiente
0000 = 0
0001 = 1
0010 = 2
...
1111 = 15
Estos no están firmados porque no hay indicación de si son negativos o positivos.
Magnitud de signo y notación en exceso
Para almacenar números negativos, puede probar varias cosas. Primero, puede usar la notación de magnitud de signo que asigna el primer bit como un bit de signo para representar +/- y los bits restantes para representar la magnitud. Entonces, usando 4 bits nuevamente y asumiendo que 1 significa – y 0 significa +, entonces tienes
0000 = +0
0001 = +1
0010 = +2
...
1000 = -0
1001 = -1
1111 = -7
Entonces, ¿ves el problema ahí? Tenemos 0 positivo y negativo. El mayor problema es sumar y restar números binarios. Los circuitos para sumar y restar usando la magnitud del signo serán muy complejos.
Que es
0010
1001 +
----
?
Otro sistema es la notación en exceso. Puede almacenar números negativos, se deshace del problema de los dos ceros, pero la suma y la resta siguen siendo difíciles.
Entonces viene el complemento a dos. Ahora puede almacenar enteros positivos y negativos y realizar operaciones aritméticas con relativa facilidad. Hay varios métodos para convertir un número en complemento a dos. Aquí hay uno.
Convertir decimal en complemento de dos
-
Convierta el número a binario (ignore el signo por ahora), por ejemplo, 5 es 0101 y -5 es 0101
-
Si el número es positivo, entonces ha terminado. por ejemplo, 5 es 0101 en binario usando la notación de complemento a dos.
-
Si el número es negativo entonces
3.1 encontrar el complemento (invertir 0 y 1), por ejemplo, -5 es 0101, por lo que encontrar el complemento es 1010
3.2 Suma 1 al complemento 1010 + 1 = 1011. Por lo tanto, -5 en complemento a dos es 1011.
Entonces, ¿qué pasaría si quisieras hacer 2 + (-3) en binario? 2 + (-3) es -1. ¿Qué tendrías que hacer si estuvieras usando la magnitud del signo para sumar estos números? 0010 + 1101 =?
Usando el complemento a dos, considere lo fácil que sería.
2 = 0010
-3 = 1101 +
-------------
-1 = 1111
Conversión del complemento a dos en decimal
Convertir 1111 a decimal:
-
El número comienza con 1, por lo que es negativo, por lo que encontramos el complemento de 1111, que es 0000.
-
Suma 1 a 0000 y obtenemos 0001.
-
Convierta 0001 a decimal, que es 1.
-
Aplicar el signo = -1.
¡Tada!
Como la mayoría de las explicaciones que he visto, las anteriores son claras sobre cómo trabajar con el complemento de 2, pero no explican realmente lo que están matemáticamente. Intentaré hacer eso, al menos para números enteros, y primero cubriré algunos antecedentes que probablemente sean familiares.
Recuerde cómo funciona para decimal:
2345
es una forma de escribir
2 × 103 + 3 × 102 + 4 × 101 + 5 × 100.
De la misma manera, el binario es una forma de escribir números usando solo 0 y 1 siguiendo la misma idea general, pero reemplazando los 10 anteriores por 2. Luego en binario,
1111
es una forma de escribir
1 × 23 + 1 × 22 + 1 × 21 + 1 × 20
y si lo resuelves, resulta que es igual a 15 (base 10). Eso es porque es
8 + 4 + 2 + 1 = 15.
Todo esto está muy bien para los números positivos. Incluso funciona para números negativos si está dispuesto a colocar un signo menos delante de ellos, como hacen los humanos con los números decimales. Eso incluso se puede hacer en computadoras, más o menos, pero no había visto una computadora así desde principios de la década de 1970. Dejaré los motivos para una discusión diferente.
En el caso de las computadoras, resulta más eficiente utilizar un complemento representación de números negativos. Y aquí hay algo que a menudo se pasa por alto. Las notaciones complementarias implican algún tipo de inversión de los dígitos del número, incluso los ceros implícitos que vienen antes de un número positivo normal. Eso es incómodo, porque surge la pregunta: ¿todos? Eso podría ser un número infinito de dígitos a considerar.
Afortunadamente, las computadoras no representan infinitos. Los números están restringidos a una longitud particular (o ancho, si lo prefiere). Así que volvamos a los números binarios positivos, pero con un tamaño particular. Usaré 8 dígitos (“bits”) para estos ejemplos. Entonces nuestro número binario realmente sería
00001111
o
0 × 27 + 0 × 26 + 0 × 25 + 0 × 24 + 1 × 23 + 1 × 22 + 1 × 21 + 1 × 20
Para formar el complemento a 2 negativo, primero complementamos todos los dígitos (binarios) para formar
11110000
y suma 1 para formar
11110001
pero, ¿cómo vamos a entender que eso significa -15?
La respuesta es que cambiamos el significado del bit de orden superior (el más a la izquierda). Este bit será un 1 para todos los números negativos. El cambio consistirá en cambiar el signo de su contribución al valor del número en el que aparece. Así que ahora nuestro 11110001 se entiende que representa
–1 × 27 + 1 × 26 + 1 × 25 + 1 × 24 + 0 × 23 + 0 × 22 + 0 × 21 + 1 × 20
¿Observa que “-” delante de esa expresión? Significa que el bit de signo tiene el peso -27, eso es -128 (base 10). Todas las demás posiciones conservan el mismo peso que tenían en números binarios sin signo.
Trabajando nuestro -15, es
-128 + 64 + 32 + 16 + 1
Pruébelo en su calculadora. es -15.
De las tres formas principales en las que he visto los números negativos representados en las computadoras, el complemento de 2 gana sin lugar a dudas por conveniencia en el uso general. Sin embargo, tiene una rareza. Dado que es binario, debe haber un número par de posibles combinaciones de bits. Cada número positivo se puede emparejar con su negativo, pero solo hay un cero. Negar un cero te da cero. Entonces hay una combinación más, el número con 1 en el signo de bits y 0 en todos lados. El número positivo correspondiente no encajaría en el número de bits que se utilizan.
Lo que es aún más extraño acerca de este número es que si intentas formar su positivo complementando y sumando uno, obtienes el mismo número negativo. Parece natural que cero hiciera esto, pero esto es inesperado y no es en absoluto el comportamiento al que estamos acostumbrados porque, aparte de las computadoras, generalmente pensamos en un suministro ilimitado de dígitos, no en esta aritmética de longitud fija.
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 pueda encontrar más si investiga “desbordamiento” para la aritmética de punto fijo. Si realmente quiere profundizar en él, también puede investigar “aritmética modular”.