方法1:
//main.cpp
#include <iostream>
using namespace std;
int count_ones(int n)
{
n = (n & 0x55555555) + ((n & 0xaaaaaaaa) >> 1);
n = (n & 0x33333333) + ((n & 0xcccccccc) >> 2);
n = (n & 0x0f0f0f0f) + ((n & 0xf0f0f0f0) >> 4);
n = (n & 0x00ff00ff) + ((n & 0xff00ff00) >> 8);
n = (n & 0x0000ffff) + ((n & 0xffff0000) >> 16);
return n;
}
int main(int argc,char* argv[])
{
cout<<count_ones(255)<<endl;
return 0;
}
方法2:
const int one_in_char[256]=
{
0, 1, 1, 2, 1, 2,2,3
......
,8
}
此为 0-255 每个数中 1 的个数。
int func2(int v)
{
int n=v;
unsigned char *ptr=(unsigned char *)&n;
return one_in_char[ptr[0]]+one_in_char[ptr[1]]+one_in_char[ptr[2]]+one_in_char[ptr[3]];
}
本人觉得方法1更快速:)