【问题标题】:Python Bit-wise OperationPython 按位运算
【发布时间】:2017-11-05 18:23:28
【问题描述】:

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

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。如果计数器移动到第二个字符,1不会被计数两次吗?

【问题讨论】:

  • 作为参考,是“Python 编程面试的要素”第 23 页 :-) 吗?
  • @AzizAlto 是的!我现在正在读这本书。其中一位作者的名字是 Aziz,就像你的把手一样。是巧合还是……?
  • 纯属巧合!碰巧我昨天正在通过确切的例子浏览这本书,祝你好运! :-]

标签: python bitwise-operators


【解决方案1】:

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

所以对于您的示例,它会这样做:

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

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

【讨论】:

    【解决方案2】:

    1 是 0b0001。与 0b1100 进行与运算得到 0。永远不会有任何重复计数。

    【讨论】:

      【解决方案3】:

      代码

      num_bits += x&1
      

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

      x >>= 1
      

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

      最后是循环条件

      while x:
      

      检查数字中是否还有任何位设置,此检查失败,因为最终设置的位被移出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-13
        • 2018-01-28
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        相关资源
        最近更新 更多