Liczenie bitów: Jak działa ta linia? n = n i (n-1); [duplikować]

To pytanie ma już tutaj odpowiedź:

n & (n-1) co robi to wyrażenie? [duplikować] 4 odpowiedzi

Potrzebuję wyjaśnienia, jak działa ta konkretna linia.
Wiem, że ta funkcja zlicza liczbę bitów 1, ale jak dokładnie ta linia usuwa prawy 1 bit?

int f(int n) {
    int c;
    for (c = 0; n != 0; ++c) 
        n = n & (n - 1);
    return c;
}

Czy niektórzy mogą mi to krótko wyjaśnić lub podać „dowód”?

questionAnswers(2)

yourAnswerToTheQuestion