如何在没有“*”运算符的情况下执行乘法?
2022-09-01 00:13:16
我只是在学习C时经历了一些基本的东西。我遇到了一个问题,在不使用*运算符的情况下将数字乘以7。基本上就是这个
(x << 3) - x;
现在我知道了基本的位操作操作,但是我无法理解如何在不使用*运算符的情况下将数字乘以任何其他奇数?有没有通用的算法?
我只是在学习C时经历了一些基本的东西。我遇到了一个问题,在不使用*运算符的情况下将数字乘以7。基本上就是这个
(x << 3) - x;
现在我知道了基本的位操作操作,但是我无法理解如何在不使用*运算符的情况下将数字乘以任何其他奇数?有没有通用的算法?
想想你如何使用铅笔和纸在十进制中相乘:
12
x 26
----
72
24
----
312
乘法在二进制中是什么样子的?
0111
x 0101
-------
0111
0000
0111
-------
100011
注意到什么了吗?与十进制乘法不同,在十进制中,您需要记住“时间表”,当以二进制乘法时,您始终将其中一个术语乘以0或1,然后再将其写在列表附录中。不需要时间表。如果第二项的数字为 1,则在第一项中添加。如果它是 0,则不这样做。另请注意,附录如何逐步向左移动。
如果您不确定这一点,请在纸上进行一些二进制乘法。完成后,将结果转换回十进制,然后查看其是否正确。在你做了一些之后,我想你会知道如何使用移位和加法来实现二进制乘法。
每个人都忽略了显而易见的事实。不涉及乘法:
10^(log10(A) + log10(B))