Contando el número de bits: ¿Cómo funciona esta línea? n = n & (n-1); [duplicar]

Esta pregunta ya tiene una respuesta aquí:

n y (n-1) ¿qué hace esta expresión? [duplicar] 4 respuestas

Necesito una explicación de cómo funciona esta línea específica.
Sé que esta función cuenta el número de bits de 1, pero ¿cómo exactamente esta línea borra el bit más a la derecha?

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

¿Puede alguien explicármelo brevemente o dar alguna "prueba"?

Respuestas a la pregunta(2)

Su respuesta a la pregunta