¿Por qué la multiplicación binaria con signo (complemento a 2) tiene un procedimiento diferente al no firmado?

3

La multiplicación binaria de complemento a 2 no tiene el mismo procedimiento que sin firmar si ambos operandos no tienen el mismo signo. ¿Cuál es la lógica detrás de eso?

¿Se aplica una consideración especial a la división también cuando llevamos a cabo la división con números complementarios de 2?

    
pregunta quantum231

2 respuestas

1
  

La multiplicación binaria de complemento a 2 no tiene el mismo procedimiento que unsigned

En el módulo 2 n aritmético -1 y 2 n -1 son equivalentes. De ello se deduce que si la salida es del mismo tamaño que la entrada, podemos utilizar un multiplicador de módulo 2 n para las operaciones firmadas y no firmadas.

Sin embargo, si la salida es más grande que las entradas, esta propiedad ya no se mantiene. Considere, por ejemplo, multiplicar el número de 11 bits 11111111 (255 si se interpreta como binario directo, -1 si se interpreta como complemento de 2) consigo mismo para producir un resultado de 16 bits. Para los números firmados, el resultado correcto es 0000000000000001. Sin embargo, para los números no firmados, el resultado correcto es 1111111000000001 (65025 en decimal)

Si quiere pensar esto en términos de aritmética modular, puede observar que -1 y 255 son el mismo módulo 256 pero diferente módulo 65536.

Esta es la razón por la que cuando miras (por ejemplo) el conjunto de instrucciones de armado solo ves una instrucción de multiplicación de 32 * 32- > 32 pero dos instrucciones de multiplicación de 32 * 32- > 64 diferentes.

  

¿Se aplica una consideración especial a la división también cuando llevamos a cabo la división con números complementarios de 2?

La división (en el sentido en que lo pensamos en las computadoras) no es una operación aritmética modular. Así que no hay razón para esperar una equivalencia entre la división firmada y no firmada y, de hecho, no existe una.

Nuevamente para dar un ejemplo, considere 11111110/00000010. En aritmética no firmada esto daría como resultado 01111111 (127) en aritmética firmada daría como resultado 11111111 (-1)

    
respondido por el Peter Green
0

Bueno, tal vez entienda que dos complementos hacen que la suma y la resta sean muy agradables, no tiene que preocuparse por la interpretación de los patrones de bits como se firman o no. Una resta aún mejor utiliza la lógica de adición, invierte el segundo operando e invierte el bit de acarreo (invierte y agrega uno para negar).

Pero multiplicar y dividir son una historia diferente y tiene que ver con la extensión de signo. Y la simple naturaleza de las matemáticas elementales.

Si quiero multiplicar dos números de cuatro bits (las letras son bits)

    abcd
  * efgh
=========

Para no perder ningún bit, necesitaré al menos 8 bits para almacenar el resultado. Para que sea más fácil ver el segundo número, no sabemos si eso es positivo o negativo, pero solo demuestra el problema usando lo que aprendimos en la escuela primaria.

     abcd
  *  1111
=========
     abcd
    abcd
   abcd
+ abcd
==========
  xxxxxxx

cuando se suman, inicialmente es un resultado de 7 bits, pero existe la posibilidad de que un acarreo haga que necesite 8 bits, 0xF veces 0xF sin firma es 0xE1 necesita 8 bits como resultado.

Y aquí está el problema, si esos son números sin firmar, entonces debes rellenar con ceros, si esos son números con firma, entonces debes rellenar con el signo, de modo que si es un uno y sin firmar, se parece a lo que ves arriba Si usa números con signo y a es uno, debe hacerlo

     abcd
  *  1111
=========
  111abcd
  11abcd
  1abcd
+ abcd
==========
  xxxxxxx

O puede pensar que es multiplicar 1111abcd con el segundo operando de cuatro bits.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas