我有64位数(63位+符号位),用二进制补码表示,存储在两个无符号的32位整数中。算法使用32位无符号整数乘64位数
struct Long
{
uint32 high;
uint32 low;
}
我如何能实现乘法算法,只使用32位数字,并检查结果在63位配合,我想返回指示溢出如果结果不符合的错误代码。
我有64位数(63位+符号位),用二进制补码表示,存储在两个无符号的32位整数中。算法使用32位无符号整数乘64位数
struct Long
{
uint32 high;
uint32 low;
}
我如何能实现乘法算法,只使用32位数字,并检查结果在63位配合,我想返回指示溢出如果结果不符合的错误代码。
查看GNU MP library中的'longlong.h'头文件。我相信这个头文件的版本也在GNU C源代码中。宏:smul_ppmm根据无符号双字产品定义:umul_ppmm。这使您可以使用32x32 => 64位乘法来实现64x64 => 128位乘法。
大多数编译器都有一个很长的64位的类型,应该使用乘法。 – Pubby
我需要算法,假设没有64位支持。 –
维基百科描述了计算机使用的算法:http://en.wikipedia.org/wiki/Multiplication_algorithm –