在阅读整数时间复杂度的位计数算法(Brian Kernighan)之后,这个问题直接出现。有问题的Java代码是
int count_set_bits(int n) {
int count = 0;
while(n != 0) {
n &= (n-1);
count++;
}
}
我想了解n &= (n-1)
这里实现了什么?我在另一个漂亮的算法中看到了类似的构造,用于检测数字是否是 2 的幂,例如:
if(n & (n-1) == 0) {
System.out.println("The number is a power of 2");
}