32-бит или нет? Я просто пришел с этим методом в Java после прочтения « взломать интервью по кодированию » 4-е издание упражнений 5.5 (глава 5: Бит Манипуляция). Если младший значащий бит равен 1 приращению count
, тогда сдвиньте вправо целое число.
public static int bitCount( int n){
int count = 0;
for (int i=n; i!=0; i = i >> 1){
count += i & 1;
}
return count;
}
Я думаю, что это более интуитивно, чем решения с постоянным 0x33333333, независимо от того, насколько они быстры. Это зависит от вашего определения «лучший алгоритм».