在寻找有效的算法用于乘以2个大的数字,在一个论坛上遇到了C以下方法: -乘用算法Bitshifts
...
typedef unsigned long long ULL;
ULL multiply (ULL a,ULL b)
{
ULL result = 0;
while(a > 0)
{
if(a & 1)
{
result += b;
}
a >>= 1;
b <<= 1;
}
return result;
}
...
上述算法中不需要乘法指令,而使用位位移和只有加法操作(因此使它更快)。
检查该方法工作正常,但是,我没有完全知道它是如何工作的。解释会有帮助。
请注意一些CPU可以有非常缓慢的移位操作 - 68008曾经是一个例子。所以你的里程可能有所不同 – tofro
“因此使它更快” - 在一个不是 –
该算法是你在学校长时间乘法学习的相同的东西;除了第一个操作数是以2为底的。它有时被称为“俄罗斯乘法” –