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;
}少写代码!多思考!
本文介绍了一种高效的计算整数汉明重量的方法,通过位操作实现。提供了两种不同的实现方式:一种是通过预定义的掩码进行位的累加求和;另一种是通过不断消除最低位的1来减少计算量。这两种方法都有效地减少了计算步骤,提高了效率。
2494

被折叠的 条评论
为什么被折叠?



