我有64位数字(63位+符号位),表示为二进制补码数,存储在两个无符号32位整数中.
struct Long
{
uint32 high;
uint32 low;
}
Run Code Online (Sandbox Code Playgroud)
如何实现一个乘法算法,只使用32位数,并检查结果是否适合63位,我想返回一个错误代码,如果结果不合适则表示溢出.
通常你需要2*n位来存储两个n位数的乘积(最大结果是(2 ^ n)^ 2 = 2 ^(2*n)),所以我最好的想法是将数字分成四个16 -bit部件,将它们逐个相乘并将它们相加.总共16次乘法,但错误检查是微不足道的.