我试图理解一些代码,其中我找到了声明:
n=n&(n-1);
这是做什么的?
答案 0 :(得分:9)
该等式将n
中最不重要的非零位清零。
如果我们假设8位,那么这是包络解释的背面。让n
为70。
n = 01000110
n-1 = 01000101
--------
n&(n-1) = 01000100
因此,如果结果为0,则表示最初在n
中只设置了一个位,这意味着它的幂是2(或者它与0一起)。
如果在循环中迭代应用直到n
变为0,则迭代次数将计算最初在n
中设置的位数。但是,大多数处理器都有内置操作来为您执行此操作。
如果对您有兴趣,那么搜索此网站的“bithacks”会产生很多点击。