我正在解决一个我能够解决的问题,除了最后一部分-我不确定一个人如何使用按位运算符进行乘法:

0*8 = 0

1*8 = 8

2*8 = 16

3*8 = 24

4*8 = 32

您能推荐一种解决方法吗?

最佳答案

要乘以2的任意值乘以N的幂(即2 ^ N),则将这些位向左移动N次。

0000 0001 = 1

times 4 = (2^2 => N = 2) = 2 bit shift : 0000 0100 = 4

times 8 = (2^3 -> N = 3) = 3 bit shift : 0010 0000 = 32

等等..

要分割,请向右移动位。

这些位全部为1或0-您不能移位一位的一部分,因此,如果您要乘以的数字不是整数N的值
即。
since: 17 = 16  + 1
thus:  17 = 2^4 + 1

therefore: x * 17 = (x * 16) + x in other words 17 x's

因此,要乘以17,您必须向左移动4位,然后再次添加原始数字:
==> x * 17 = (x * 2^4) + x
==> x * 17 = (x shifted to left by 4 bits) + x

so let x = 3 = 0000 0011

times 16 = (2^4 => N = 4) = 4 bit shift : 0011 0000 = 48

plus the x (0000 0011)

即。
    0011 0000  (48)
+   0000 0011   (3)
=============
    0011 0011  (51)

编辑:更新为原始答案。 Charles Petzold has written a fantastic book 'Code'将以最简单的方式解释所有这些以及更多内容。我完全推荐这个。

关于bit-manipulation - 如何使用按位运算符执行乘法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3722004/

10-10 14:06