2010-07-13 5 views
1
#include <iostream> 
using namespace std; 
int mulths(int u,int v) 
{ 
    unsigned u0,v0,w0; 
    int u1,v1,w1,w2,t; 

    u0 = u & 0xFFFF; 
    u1 = u >> 16; 

    v0 = v & 0xFFFF; 
    v1 = v >> 16; 

    w0 = u0 * v0; 
    t = u1 * v0 + (w0 >> 16); 

    w1 = t & 0xFFFF; 
    w2 = t >> 16; 
    w1 = u0 * v1 + w1; 

    return u1 * v1 + w2 + (w1 >> 16); 
} 

int main() 
{ 
    int u,v; 
    cin >> u >> v; 
    cout << mulths(u, v) << endl; 
    return 0; 
} 

est-ce qu'il renvoie le produit de deux nombre oui ou il renvoie le bit le plus significatif? car j'entre 5 et 7 et il renvoient 0question sur Multipliez haute signé

Répondre

1

"Multiplier haut" renvoie le mot haut du résultat. Par exemple. si ints est de 32 bits, alors quand vous multipliez deux nombres de 32 bits, vous obtenez un résultat de 64 bits. Vous pouvez donc considérer cela comme un mot haut de 32 bits (signé) et un mot faible de 32 bits (non signé). Par exemple. 0x x 0x456789AB = 0x004EF78252247ACD. Mot haut (signé) = 0x004EF782, mot bas (non signé) = 0x52247ACD.

Pour votre test, les valeurs de 5 et 9 sont trop petites et donc le mot haut sera zéro. Essayez des valeurs plus grandes telles que ci-dessus pour voir si vous obtenez le résultat correct, par ex.

$ g++ -m32 -Wall mulths.cpp -o mulths 
$ ./mulths 
1000 
1000 
0 
$ ./mulths 
100000 
100000 
2 
$ ./mulths 
19088743 # 0x
1164413355 # 0x456789AB 
5175170  # 0x004EF782 
$ 
+0

le même résultat –

+0

Notez que vous devez utiliser des valeurs assez grandes si vous avez des ints de 32 bits, par ex. en décimal, 100000 x 100000 donnera un résultat de mot élevé de 2. –