题目:
如题所示
思路:
看一个实例,1011*1010,由于二进制的特殊性,可以将该乘法运算表达式拆分为两个运算,1011*1000以及1011*0010的和,对于二进制运算,左移一位,等价于乘以0010,左移三位,等价于乘以1000,因此两者的乘积为10110+1011000之和,即为1101110.
通过上述例子,可知一个乘法运算可以转化为一系列的移位和加法运算来完成。如a*b
最后一个1可通过b&~(b-1)求得,可通过b&(b-1)去掉,为了高效得到左移的位数,可以提前计算并保存在map中。
代码:
时间: 2024-10-06 01:10:11