要以加法和移位的方式进行乘法,您需要将其中一个数字分解为 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(算术单元)的利用率,可以像加法一样快地执行乘法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)