拆分整数乘法

我需要一种算法,该算法使用两个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;

}

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

那么,最好的解决方法是什么?


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

:请 使用boost

回答:

只需使用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;

}

以上是 拆分整数乘法 的全部内容, 来源链接: utcz.com/qa/415119.html

回到顶部