c++ - 拆分整数乘法

标签 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;

}

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

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


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

Obs:请避免使用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;
}

关于c++ - 拆分整数乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19900597/

相关文章:

c++ - 为什么新的 VS2013 项目的功能在文件是.cpp 的链接中未解决,但如果文件是.c 则可以

c - 奇怪的链接行为 - gcc 库

javascript - JavaScript 上的插入排序算法

java - 为什么我的 BST 不会写入文件?

php - Web服务和ORM框架?

C++找出正在使用的动态内存

c++ - 转换指南

c - C 中后台子进程的无效命令

objective-c - 从 Objective-C 调用 C

algorithm - 从 ulong 中删除位的快速方法