32位为例):
1.先造表 int[256],保存1-255对应二进制数1的个数。
2.对整数a,先求a&255再查表。
3.然后(a>>8)&255再查表。
4.依次类推,处理完所有位数,将查表所得值相加。
这个最简单的办法是
while(a>0)
{
a=a&(a-1);
count++;
}
int fun(int x)
{
x = (0x55555555 & x) + ((0xAAAAAAAA & x)>>1);
x = (0x33333333 & x) + ((0xCCCCCCCC & x)>>2);
x = (0x0F0F0F0F & x) + ((0xF0F0F0F0 & x)>>4);
x = (0x00FF00FF & x) + ((0xFF00FF00 & x)>>8);
x = (0x0000FFFF & x) + ((0xFFFF0000 & x)>>16);
return x;
}
int main()
{
std::cout<<fun(0x0f0e0010);
system("pause");
}