在尋找有效的算法用於乘以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爲底的。它有時被稱爲「俄羅斯乘法」 –