¿Es por lo general no tener un carry en el método del complemento de dos para restar dos números binarios cuando restamos un número grande de uno pequeño?
¿Es por lo general no tener un carry en el método del complemento de dos para restar dos números binarios cuando restamos un número grande de uno pequeño?
Carry se comporta como si todos los números estuvieran sin firmar. Simplemente reste lo que le enseñaron en la escuela, es decir, de derecha a izquierda con 'pedir prestado':
4 = 0100
7 = 0111
---- -
1101 with a borrow remaining
7 = 0111
4 = 0100
---- -
0011 with no borrow remaining
Siempre que quede un préstamo, se establecerá un sumador-sumador binario. Es bastante obvio que esto sucederá si y solo si el primer operando es menor que el segundo. Hasta ahora para números positivos.
Entonces, ¿qué pasa con los números negativos?
Como ya señalé, carry se comporta como si todos los números estuvieran sin firmar.
Para un número negativo, primero debe buscar qué número sin signo tiene la misma representación binaria que el número negativo.
Por ejemplo, -3
está representado por 1101
en el complemento de dos (4 bits).
1101
representa 13
cuando se considera un número sin signo. Eso significa:
En binario:
-3 = 1101
4 = 0100
---- -
1001 with no borrow remaining
4 = 0100
-3 = 1101
---- -
0111 with a borrow remaining
En general, el equivalente sin signo de un número negativo en el complemento de dos es siempre mayor que el equivalente sin signo de un número positivo en el complemento de dos. Por lo que se refiere al acarreo, un número negativo siempre es mayor que un número positivo. Si lo tiene en cuenta, la respuesta a su pregunta debería ser: sí.
Debes comenzar por comprender que el negativo de un valor entero codificado en dos complementos se logra invirtiendo todos los bits y luego agregando uno al resultado. Prueba dejada como un ejercicio para el lector.
Debes seguir de eso que (a - b) = (a + (-b)). Entonces restar b de a es lo mismo que calcular el negativo de b y sumarlo a a. Por lo tanto, puede utilizar un sumador para lograr la resta, cuando desee realizar la resta, establecer el acarreo en 1 en el segmento de bits menos significativo e invertir los bits de b.
Se puede ir un poco más profundo, invirtiendo condicionalmente un poco usando la puerta XOR. Es decir, b XOR 0 = b
y b XOR 1 = /b
. Con toda esta información, debería poder ver claramente que un sumador puede realizar la resta.
Lea otras preguntas en las etiquetas binary