按位运算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" 会产生很多结果。
我试图理解一些代码,其中我发现了语句:
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" 会产生很多结果。