整数的分割乘法

Rod*_*ira 1 c c++ algorithm

我需要一个使用两个 32 位整数作为参数的算法,并返回这些参数的乘法,并将其拆分为另外两个 32 位整数:32 最高位部分和 32 最低位部分。

我会尝试:

uint32_t p1, p2; // globals to hold the result

void mult(uint32_t x, uint32_t y){
    uint64_t r = (x * y);

    p1 = r >> 32;
    p2 = r & 0xFFFFFFFF;

}
Run Code Online (Sandbox Code Playgroud)

虽然它可以工作1,但不能保证机器中存在 64 位整数,也不能保证编译器使用它们。

那么,怎样才是最好的解决方法呢?


1:实际上,它不起作用,因为我的编译器不支持64位整数。

Obs:请避免使用boost

APr*_*mer 6

只需使用 16 位数字即可。

void multiply(uint32_t a, uint32_t b, uint32_t* h, uint32_t* l) {
    uint32_t const base = 0x10000;
    uint32_t al = a%base, ah = a/base, bl = b%base, bh = b/base;
    *l = al*bl;
    *h = ah*bh;
    uint32_t rlh = *l/base + al*bh;
    *h += rlh/base;
    rlh = rlh%base + ah*bl;
    *h += rlh/base;
    *l = (rlh%base)*base + *l%base;
}
Run Code Online (Sandbox Code Playgroud)