Duda con resta complemento a 2 de dos bits

Duda con resta complemento a 2 de dos bits

de Gianluca Giordano Pignatta -
Número de respuestas: 3

Hola, mi duda es para la siguiente resta.

En complemento a 2, el -2 se representa como 10.
Mi pregunta es como se resuelve la resta de:
-1 - (-2) en complemento a 2.
Seria
 11                         11
-                  o      +
 (10)                      10

Porque como al aplicar el complemento a 2 de (10) me da 10, tendria que darme el mismo resultado sumar que restar, pero en la suma me da overflow y en la resta tiene un resultado que seria valido (-1 - (-2) = 1)
El problema creo que esta que no existe el -(-2) pero no me queda claro.

Muchas gracias

En respuesta a Gianluca Giordano Pignatta

Re: Duda con resta complemento a 2 de dos bits

de Gustavo Brown -

Gianluca,

  No tiene mucho sentido trabajar en complemento a 2 de 2 bits (solo podes representar 4 números: -2, -1, 0, 1),  pero la misma situación ocurre en complemento a 2 de N bits, con cualquier N.

Si te fijas en complemento a 2 de N bits siempre hay 1 número negativo cuyo opuesto no se puede representar (porque el 0 viene a tomar una de las codificaciones): es el -2^(N-1), cuyo opuesto no se puede representar.

Para hacer la resta normalmente podes hacer 2 operaciones:

 - Aplicar el algoritmo de la resta

 - Sumar el opuesto del sustraendo

Y el resultado de ambas operaciones es el correcto siempre que el mismo sea representable, ahora el tema es que en teoría solo podes operar con operandos representables y ahí es donde entra el problema de tu ejemplo.

Si en tu ejemplo aplicamos el algoritmo de la resta, tengo que tanto minuendo como sustraendo son representables y hago esta operación:

 11
-10
=== 01

   que es 1 y es el resultado corrrecto de -1 - (-2)

Si quiero operar sumando el opuesto del sustraendo tengo el problema que 2 no es representable en complemento a 2 de 2 bits. Entonces a priori no podría hacer la cuenta porque no puedo representar uno de sus operandos. Pero puedo hacer una "trampita" que viene a ser extender los números con los que trabajo y pasar en tu ejemplo a trabajar con números en complemento a 2 de 3 bits. Ahí si puedo representar el 2. Luego tengo que verificar a mano que el resultado sea representable en complemento a 2 de 2 bits:

Entonces represento -1 y 2 en complemento a 2 de 3 bits y hago la suma:

11
 111
+010
====
 001

y el resultado es 001 que es 1 y se puede representar en complento a 2 de 2 bits. 

Podes intentar hacer lo mismo haciendo la cuenta 1 - -2, en este caso el resultado no lo vas a poder representar en complemento a 2 de 2 bits.

Saludos,
  Gustavo

En respuesta a Gustavo Brown

Re: Duda con resta complemento a 2 de dos bits

de Gianluca Giordano Pignatta -

Entendí perfecto muchas gracias, solo una duda mas, ¿Cuál es el resultado entonces de
-1 - (-2) en complemento a 2 de dos bits?.
¿Es 01 o es No representable?

En respuesta a Gianluca Giordano Pignatta

Re: Duda con resta complemento a 2 de dos bits

de Gustavo Brown -

Es 1.

Lo que no es representable es el número 2. Pero para restar  -1 - (-2) no es necesario representar el 2 si usas el algoritmo de la resta.

Saludos,
  Gustavo