¿Cómo puedo restar 110001 de 1011 usando el método de complemento a 2?

Queremos agregar 1011 a -110001.

1011 ya es positivo, por lo que la representación del complemento de dos es la misma.

Digamos que tenemos 8 bits para representar estos números. Se realmente tenemos
00001011 y 00110001.

Para obtener el complemento de dos de 00110001 (para obtener su representación negativa), necesitamos voltear los bits y agregar uno .

¿Por qué voltear los bits?
Así es como se representa el número de complemento de dos: El valor del primer bit es negativo 2 ^ N (en este caso, es -2 ^ 7) Los valores de todos los otros bits son iguales a su representación binaria positiva.
El bit más significativo en la representación binaria siempre es cero, por lo que cuando lo cambiamos a uno, restamos 2 ^ N de nuestro número. Para contrarrestar el hecho de que solo restamos una gran cantidad del valor de nuestro número, necesitamos agregar algo más. Cuanto mayor fuera nuestro número original (por ejemplo, si fuera 127), solo querríamos agregar un poco de regreso (-128 + 1 = -127). Del mismo modo, cuanto menor fuera nuestro número original (por ejemplo, si fuera 3), querríamos agregar un montón (-128 + 125 = -3). Por esta razón de compensación, volteamos los bits.

¿Por qué agregar uno?
La suma de todas las potencias de dos menos de 2 ^ N es 2 ^ N – 1. Y así, al voltear todos los bits, perdimos 1, y ahora necesitamos volver a agregarlo.

Y entonces, el complemento de dos de 00110001 es 11001111.

La belleza del sistema de complemento de dos es que ahora podemos sumar los dos números para ejecutar la resta.

00001011
+11001111
11011010

Para convertir del complemento de dos a binario, sumamos el valor negativo del primer bit (ponderado por su potencia de dos) y el valor positivo de todo el resto.
Y entonces, la respuesta es
-128 + 64 + 16 + 8 + 2 = -38

Para verificar, el problema original era “restar 49 de 11”.

¿Estoy haciendo tu tarea? oO

Resta del complemento 2
La resta del complemento a dos es la suma binaria del minuendo al complemento a 2 del sustraendo (sumar un número negativo es lo mismo que restar uno positivo).

Primero asegúrese de que ambos números tengan la misma longitud (del mismo número de bits). Su sustraendo sería 001011

Entonces, tomando el cumplido de dos de 001011, obtendríamos 110100 + 1 = 110101

Sumando 110001 y 110101, obtendrás 1100110

Ahora, si la diferencia es mayor que el minuendo, descarte el carry.

La solución ahora es 100110

Aquí hay una respuesta más parecida al hardware. Agrega números binarios usando un sumador completo por bit. Aquí hay uno de Digital Logic Design

Las entradas son A y B como bits individuales, más un carry en Cin de la etapa anterior; Las salidas son S, la suma y la ejecución, Cout. Une tantos de estos como quieras, conectando el Cout de una etapa al Cin de la etapa anterior. Empate Cin de la etapa menos significativa (bit 0) a 0. Eso le permite agregar A y B.

Ahora, para que reste B de A, debe invertir todos los bits de B y vincular el Cin del bit 0 a 1.

Entonces, hay un buen truco. Puede hacer un sumador / sustractor conmutable. Ejecute cada bit de B a una entrada de un exclusivo o puerta. Ejecute la salida de cada puerta XOR a la B del sumador completo. Tome las otras entradas de los XOR y átelas al Cin del bit 0. Ajuste eso a 0 y tendrá un sumador. Póngalo en 1 y tendrá un sustractor. Entonces eso podría venir directamente de un poco en la instrucción de lenguaje de máquina.