2010-07-13 182 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; 
} 

是否返回兩個數字的乘積是或它返回最重要的位? 因爲我輸入5和7並返回0關於乘以高位有符號的問題

回答

1

「乘以高位」返回結果的高位字。例如。如果整數是32位,那麼當你乘以兩個32位整數時,你會得到一個64位的結果。所以你可以把它看作一個32位(有符號)高位字和一個32位(無符號)低位字。例如。 0x x 0x456789AB = 0x004EF78252247ACD。高字(帶符號)= 0x004EF782,低字(無符號)= 0x52247ACD

對於您的測試,5和9的值太小,因此高位字將爲零。嘗試使用較大的值(例如上述值)以查看您是否獲得了正確的結果,例如

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

結果相同 – 2010-07-13 07:25:36

+0

請注意,如果您有32位整數,例如,您需要使用相當大的值。在十進制中,100000 x 100000會給出2的高字結果。 – 2010-07-13 07:35:34