DIEA
要用加法和平移来乘,您需要将其中一个数分解为2的幂,如下所示:21 * 5 = 10101_2 * 101_2 (Initial step)
= 10101_2 * (1 * 2^2 + 0 * 2^1 + 1 * 2^0)
= 10101_2 * 2^2 + 10101_2 * 2^0
= 10101_2 << 2 + 10101_2 << 0 (Decomposed)
= 10101_2 * 4 + 10101_2 * 1
= 10101_2 * 5
= 21 * 5 (Same as initial expression)(_2平均基数2)正如你所看到的,乘法可以被分解成加、移和返回。这也是为什么乘法比位移位或加法更长的原因-在位数中它是O(n^2)而不是O(N)。真正的计算机系统(相对于理论计算机系统)有限的位数,因此乘法比加法和移位要花费恒定的时间倍数。如果我没记错的话,现代处理器,如果流水线正确的话,就可以通过干扰处理器中ALU(算术单位)的使用来实现与加法一样快的乘法。