数1:
int func(unsigned int i) {
unsigned int temp = i;
temp = (temp & 0x55555555) + ((temp & 0xaaaaaaaa) >> 1);
temp = (temp & 0x33333333) + ((temp & 0xcccccccc) >> 2);
temp = (temp & 0x0f0f0f0f) + ((temp & 0xf0f0f0f0) >> 4);
temp = (temp & 0x00ff00ff) + ((temp & 0xff00ff00) >> 8);
temp = (temp & 0x0000ffff) + ((temp & 0xffff0000) >> 16);
return temp;
}
或者
int count = 0;
int x = 0xFFFFFFFF;
while (x) {
x = x & (x - 1);
count++;
}
数0:
int count = 0;
int x = 0x00000000;
while (x + 1) {
x = x | (x + 1);
count++;
}