Будьте осторожны с тем, что вы просите. Один из очень быстрых методов - сделать поиск по таблице:
int bittable [] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, ... };
int numbits (int v)
{
return bittable [v];
}
где bittable
содержит запись для каждого int. Конечно, это имеет осложнения для отрицательных значений. Более практичным способом было бы подсчитать биты в битовых полях числа
int bittable [16] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
int numbits (int v)
{
int s = 0;
while (v != 0)
{
s += bittable [v & 15];
v >>= 4;
}
return s;
}