方法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更快速:)