http://en.wikipedia.org/wiki/Hamming_weight
#include <cstdio>
const int m1 = 0x55555555;
const int m2 = 0x33333333;
const int m4 = 0x0f0f0f0f;
const int m8 = 0x00ff00ff;
const int m16 = 0x0000ffff;
int PopCount(int x)
{
x = (x & m1) + ((x >> 1) & m1);
x = (x & m2) + ((x >> 2) & m2);
x = (x & m4) + ((x >> 4) & m4);
x = (x & m8) + ((x >> 8) & m8);
x = (x & m16) + ((x >> 16) & m16);
return x;
}
int PopCount_1(int x)
{
int sum = 0;
while (x) {
x &= (x-1);
++sum;
}
return sum;
}
int main()
{
int ans;
while (scanf("%d",&ans) != EOF) {
printf("%d\n",PopCount(ans));
printf("%d\n",PopCount_1(ans));
}
while (true) ;
return 0;
}
少写代码!多思考!