¿Por qué esta función cuenta el número de bits establecidos en un entero?

Me hicieron la siguiente pregunta en una entrevista:

int foofoo(unsigned int u) {
    unsigned int foo = u;
    do{
        u = u/2;
        foo -= u;
    }while(u > 0);
    return foo;
}

Me pidieron que dijera qué hace esta función y pude encontrar que cuenta el número de bits establecidos en un valor int sin signo, pero no pude probar eso, ¿tal vez alguien puede?

Respuestas a la pregunta(4)

Su respuesta a la pregunta