【发布时间】:2011-09-27 13:31:16
【问题描述】:
我有 64 位数字(63 位 + 符号位),表示为二进制补码,存储在两个无符号 32 位整数中。
struct Long
{
uint32 high;
uint32 low;
}
如何实现一个乘法算法,只使用 32 位数字,并检查结果是否适合 63 位?如果结果不合适,我想返回一个指示溢出的错误代码。
【问题讨论】:
-
大多数编译器都有一个 long long 类型,它是 64 位,应该使用乘法。
-
我需要算法,假设不支持 64 位。
-
维基百科描述了计算机使用的算法:en.wikipedia.org/wiki/Multiplication_algorithm
-
你应该问这个很有趣,我今天一直在实现这个算法。我正在使用内联汇编程序(in g++ for Intel IA-32),这可能不适合您——您的操作系统和编译器是什么?
标签: c++ c algorithm multiplication