我正在尝试理解一些代码,其中我发现了以下语句:
n=n&(n-1);
这个做什么?
我正在尝试理解一些代码,其中我发现了以下语句:
n=n&(n-1);
那个方程使得n
中最不重要的非零位变成零。
如果我们假设有8个二进制位,这里是简要解释。令n
为70。
n = 01000110
n-1 = 01000101
--------
n&(n-1) = 01000100
因此,如果结果为0,则意味着最初n
中只设置了一个位,这意味着它是2的幂(或者一开始就是0)。
如果在循环中反复应用,直到n
变为0,则迭代次数计算n
最初所设定的位数。但是,大多数处理器都将具有内置操作来完成此操作。
如果您对位运算感兴趣,请在本网站上搜索“bithacks”,会有很多相关信息。
n
是一个 unsigned
类型。它还将指示零是2的幂。 - Peter
x & (x - 1)
的结果为0,则表示x
是2的幂。请参见此页面上的#9。 - meowgoesthedog