关于Multiply high signed的问题

时间:2010-07-13 07:09:48

标签: c++

#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 个答案:

答案 0 :(得分:1)

“Multiply high”返回结果的高位字。例如。如果int是32位,那么当你乘以两个32位的int时,你得到一个64位的结果。因此,您可以将其视为32位(带符号)高位字和32位(无符号)低位字。例如。 0x01234567 x 0x456789AB = 0x004EF78252247ACD。高字(带符号)= 0x004EF782,低字(无符号)= 0x52247ACD

对于您的测试,5和9的值太小,因此高位字将为零。尝试使用上面较大的值来查看是否得到了正确的结果,例如

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