這個問題直接通過 Bits counting algorithm (Brian Kernighan) in an integer time complexity閱讀後。有問題的Java代碼是請解釋Kernighan的位計數算法背後的邏輯
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");
}
[比特中的整數時間複雜度計算算法(布萊恩·柯林漢)](的可能的複製http://stackoverflow.com/questions/12380478/bits-counting-algorithm-brian- kernighan在整數時間複雜性) – OhadR