如何在没有“*”运算符的情况下执行乘法?

2022-09-01 00:13:16

我只是在学习C时经历了一些基本的东西。我遇到了一个问题,在不使用*运算符的情况下将数字乘以7。基本上就是这个

      (x << 3) - x;

现在我知道了基本的位操作操作,但是我无法理解如何在不使用*运算符的情况下将数字乘以任何其他奇数?有没有通用的算法?


答案 1

想想你如何使用铅笔和纸在十进制中相乘:

  12
x 26
----
  72
 24
----
 312

乘法在二进制中是什么样子的?

   0111
x  0101
-------
   0111
  0000
 0111
-------
 100011

注意到什么了吗?与十进制乘法不同,在十进制中,您需要记住“时间表”,当以二进制乘法时,您始终将其中一个术语乘以0或1,然后再将其写在列表附录中。不需要时间表。如果第二项的数字为 1,则在第一项中添加。如果它是 0,则不这样做。另请注意,附录如何逐步向左移动。

如果您不确定这一点,请在纸上进行一些二进制乘法。完成后,将结果转换回十进制,然后查看其是否正确。在你做了一些之后,我想你会知道如何使用移位和加法来实现二进制乘法。


答案 2

每个人都忽略了显而易见的事实。不涉及乘法:

10^(log10(A) + log10(B))

推荐