Esta pregunta sigue directamente después de leer Bits counting algorithm (Brian Kernighan) in an integer time complexity. El código Java en cuestión esExplique la lógica detrás del algoritmo de conteo de bits de Kernighan
int count_set_bits(int n) {
int count = 0;
while(n != 0) {
n &= (n-1);
count++;
}
}
Quiero entender lo que está logrando n &= (n-1)
aquí? He visto el mismo tipo de construcción en otro algoritmo ingenioso para detectar si un número es una potencia de 2 como:
if(n & (n-1) == 0) {
System.out.println("The number is a power of 2");
}
duplicado posible de [Bits contando algoritmo (Brian Kernighan) en un tiempo de complejidad entero] (http://stackoverflow.com/questions/12380478/bits-counting-algorithm-brian- kernighan-in-an-integer-time-complexity) – OhadR