1、算法思路
这里只简单介绍了两种常用的位运算技巧。
1.计算一个数的二进制第k位的值
- 先把第k位移到最后一位 n >> k
- 看个位是几 n&1
合起来就是这个算法的代码 对于一个数字n其二进制第k位的值为 n >> k & 1
2.lowbit(x):返回x的最后一位1所代表的值
例如x =
(
10100
)
2
(10100)_2
(10100)2,lowbit(x)=
(
100
)
2
(100)_2
(100)2
其代码为 lowbit(x) = x &(~x + 1)
我们举例来说明一下:
x = 1010...100...00
~x = 0101...011...11
~x + 1 = 0101...100...00
对x取反之后,x最后一位1之后的所有0变成了1,最后一位1变成了0,加1之后,最后一位1的位置又变回了1,之气的元素跟x取反是相同的,因此此时取&就可以得到我们想要的数值。
这个技巧可以用来求一个二进制数的所有1的数量。