作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在学习 C 时,我只是在学习一些基本的东西。我遇到了一个问题,即在不使用 * 运算符的情况下将数字乘以 7。基本上是这样的
(x << 3) - x;
现在我知道了基本的位操作操作,但是我不知道如何在不使用 * 运算符的情况下将一个数字乘以任何其他奇数?有没有通用的算法?
最佳答案
想想你如何用铅笔和纸做十进制乘法:
12
x 26
----
72
24
----
312
乘法在二进制中是什么样子的?
0111
x 0101
-------
0111
0000
0111
-------
100011
注意到什么了吗?与十进制乘法不同,当以二进制乘法时,您需要记住“时间表”,在将其写入列表加数之前,您总是将其中一项乘以 0 或 1。不需要时间表。如果第二项的数字是 1,则添加第一项。如果它是 0,你不知道。还要注意加数是如何逐渐向左移动的。
如果您不确定这一点,请在纸上做一些二进制乘法。完成后,将结果转换回十进制,看看它是否正确。在你完成了一些之后,我想你会明白如何使用移位和加法来实现二进制乘法。
关于java - 如何在没有 '*' 运算符的情况下执行乘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2069488/
我是一名优秀的程序员,十分优秀!