Python按位操作

时间:2017-11-05 18:23:28

标签: python bitwise-operators

我在一本书中找到了以下代码:

def count_bits(x):
   num_bits = 0
   while x:
      num_bits += x&1
      x >>= 1
return num_bits

print(count_bits(12))

我不理解这一行(num_bits + = x& 1)

假设我输入12(1100),第一个字符(“1”)被计算。但是有一个右移,1100变为0110.如果计数器移动到第二个字符,不会被计数两次吗?

3 个答案:

答案 0 :(得分:3)

x&1检查最右边的位是否为1

所以对于你的例子它会这样做:

1100 & 0001 # 0
0110 & 0001 # 0
0011 & 0001 # 1
0001 & 0001 # 1

并正确返回2.通过右移,您将从右到左计数位,直到最后一次移位导致0000并打破循环

答案 1 :(得分:2)

1是0b0001。用0b1100对它进行AND运算得到0.没有任何重复计数。

答案 2 :(得分:0)

代码

num_bits += x&1

检查是否设置了最低有效位,如果设置为1则添加到num_bits。

x >>= 1

然后将数字右移一位,移出最低有效位。

最后,循环条件

while x:

检查数字中是否还有任何位,当最终设置位移出时,此检查失败。