web-dev-qa-db-fra.com

comment faire deux complément multiplication et division d'entiers?

J'ai lu ceci post sur la multiplication binaire en utilisant deux compléments. mais ce n'est pas très clair pour moi. Même moi, j'ai du mal à comprendre l'article wiki à ce sujet. Je veux savoir comment calculer les multiplications des nombres négatifs:

eg: -1 with -7 should give 7.
A 4-bit, 2's complement of -1 is : 1111
A 4-bit, 2's complement of -7 is : 1001

une méthode pas à pas pour calculer la multiplication sera utile. Aucun article sur lequel je suis tombé sur la division. Comment aborder cela?

15
eagertoLearn

étape 1: sign extend les deux entiers à deux fois plus de bits. Cette opération est sûre, mais peut ne pas toujours être nécessaire.

for 4-bit --> 1111, you would extend as 1111 1111
for 4-bit --> 0111,you would extend as 0000 0111

étape 2: faire la multiplication élémentaire

sep 3: prendre le nombre correct de bits de résultat de la partie la moins significative du résultat.

par exemple: après la multiplication, vous vous retrouvez avec quelque chose comme 0010011110prendre les 8 derniers bits, c'est-à-dire 10011110

Permettez-moi d'illustrer l'exemple que vous avez fourni: -1 X -7 en représentation 4 bits

         1111 1111        -1
       x 1111 1001     x  -7
      ----------------    ------
          11111111         7
         00000000
        00000000
       11111111
      11111111
     11111111
    11111111
   11111111
   ----------------
1  00000000111       --->  7 (notice the Most significant bit is zer``o)
      --------  (last 8-bits needed) 

vous pourriez obtenir plus de détails ici ;

pour la division: convertir en positif et après le calcul ajuster le signe. Je vais laisser cela comme exercice mais vous pouvez vous référer à ceci page .

11
brain storm

D'accord, voyons si je peux vous simplifier la tâche.

Complément à deux: IFF (si et seulement si) vous avez un nombre négatif, mettez-le d'abord sous la forme positive. Par souci de simplicité, tous les nombres seront de 6 bits. La limite des bits limitera la taille de vos numéros. En plus de cela, la taille n'a pas d'importance.

Certains nombres convertis dans leur forme binaire positive -7: 000111 16: 010000 -22: 010110 1: 000001

Maintenant pour -7 et -23 UNIQUEMENT, nous ferons un complément à deux. Nous inversons donc les bits (1 -> 0 && 0 -> 1), puis en ajoutons un.

 000111
 Goes to the complement + 1
 111000
 +    1
=111001

Et pour 22

 010110
 Goes to the complement + 1
 101001
+     1
=101010

Ensuite, vous les ajoutez simplement comme vous le feriez pour n'importe quel autre numéro.

Et il semble que quelqu'un d'autre ait déjà couvert la partie multiplication, donc je ne vais pas prendre la peine de répéter cela.

4
David