请解释Kernighan位计数算法背后的逻辑
2022-09-01 22:56:16
这个问题直接跟随在整数时间复杂度中通读比特计数算法(Brian Kernighan)。有问题的 Java 代码是
int count_set_bits(int n) {
int count = 0;
while(n != 0) {
n &= (n-1);
count++;
}
}
我想了解这里取得了什么成就?我在另一种漂亮的算法中看到了类似的构造,用于检测数字是否是2的幂,例如:n &= (n-1)
if(n & (n-1) == 0) {
System.out.println("The number is a power of 2");
}