.
Я имел в виду что-то вроде этого (что я считаю правильным):
public static int bitCount(int number){
final int MASK = 0x1;
int count = 0;
for(int i = 0; i < 32; i++){
if(((number >>> i) & MASK) == MASK){
count++;
}
}
return count;
}
Вместо этого я нашел метод, который я абсолютно не понимаю, что делает (мне кажется магией):
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
Может ли кто-нибудь помочь понять, что это так, и почему простая функция, подобная той, о которой я впервые подумал, может быть/плохой?