Poti face asa:
int nr = 0;
while (x) {
x &= (x-1);
++nr;
}
Numarul de operatii este proportional cu numarul de biti de 1 ai lui x (ceea ce inseamna ca pe cazul cel mai defavorabil, numarul operatiilor va fi similar cu parcurgerea tuturor bitilor, cum sugereaza Remar mai sus), dar in general merge mai bine. Cheia e sa observi ce se intampla cand faci x & (x-1).