この質問は、整数時間計算量でビットカウントアルゴリズム(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");
}