Из восторга Хакер, с. 66, Рисунок 5-2
int pop(unsigned x)
{
x = x - ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x + (x >> 4)) & 0x0F0F0F0F;
x = x + (x >> 8);
x = x + (x >> 16);
return x & 0x0000003F;
}
Выполняется в ~ 20-их инструкциях (зависит от арки), не имеет ветвления. Взлом Хакер равен восхитительный! Очень рекомендуется.