按位运算n&(n-1)有什么作用?

What does bitwise operation n&(n-1) do?

我试图理解一些代码,其中我发现了语句:

n=n&(n-1);

这是做什么的?

该等式将 n 中的最低有效非零位清零。

如果我们假设8位,那么这里是信封背面的解释。设 n 为 70。

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

因此,如果结果为0,则说明n原来只有一位,表示是2的幂(或者0到与)。

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


如果您通常对 bit-hack 感兴趣,则在该站点搜索 "bithacks" 会产生很多结果。