按位运算n&(n-1)做什么?

时间:2017-12-12 19:04:53

标签: c++ c bit-manipulation bitwise-operators

我试图理解一些代码,其中我找到了声明:

n=n&(n-1);

这是做什么的?

1 个答案:

答案 0 :(得分:9)

该等式将n中最不重要的非零位清零。

如果我们假设8位,那么这是包络解释的背面。让n为70。

n       = 01000110
n-1     = 01000101
          --------
n&(n-1) = 01000100

因此,如果结果为0,则表示最初在n中只设置了一个位,这意味着它的幂是2(或者它与0一起)。

如果在循环中迭代应用直到n变为0,则迭代次数将计算最初在n中设置的位数。但是,大多数处理器都有内置操作来为您执行此操作。

如果对您有兴趣,那么搜索此网站的“bithacks”会产生很多点击。