c++ - 使用 32 位无符号整数乘以 64 位数字的算法

标签 c++ c algorithm multiplication

我有 64 位数字(63 位 + 符号位),表示为二进制补码,存储在两个无符号 32 位整数中。

struct Long
{
    uint32 high;
    uint32 low;
}

如何仅使用 32 位数字来实现乘法算法,并检查结果是否适合 63 位?如果结果不合适,我想返回一个指示溢出的错误代码。

最佳答案

通常你需要 2*n 位来存储两个 n 位数字的乘积(最大结果是 (2^n)^2 = 2^(2*n)),所以我最好的想法是拆分数字分成四个 16 位的部分,将它们一一相乘并相加。总共 16 次乘法,但错误检查很简单。

关于c++ - 使用 32 位无符号整数乘以 64 位数字的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7570005/

相关文章:

c++ - 如何分离分层数据和GUI?

创建进程和匿名管道

java - 从排序的链表中删除重复的节点。为什么我的输出错误?

c - 如何打印当前行?

java - 任意 2 名学生之间年龄差异的 child 组的最小数量最多为 1

C++ 修复 OpenCV squares.cpp 示例以合并封闭的正方形

c++ - 适用于 Linux C++ 的 Visual Studio 2017 : "Cannot find or open the symbol file"

c++ - 如何修复此警告 : conversion to 'unsigned char' from 'int' may alter its value

c++ - Openssl X509 cert 获取人类可读的字符串

c - 在C中交换数组内的奇数和偶数