我需要一个算法,它使用两个 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 位整数,编译器也不能保证它们的使用。
那么,最好的解决方法是什么?
注1:实际上,它不起作用,因为我的编译器不支持 64 位整数。
Obs:请避免使用boost
.