#include <iostream>
#include <ctime>
using namespace std;
int count1s(unsigned char byte)
{
if (byte == 0)
{
return 0;
}
if (byte & 0x01)
{
return 1+count1s(byte>>1);
}
return count1s(byte>>1);
}
int count1s2(unsigned char byte)
{
static const int ones[256] =
{0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,
1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,
3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,
4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,
3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,
4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,
6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,
2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,
4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,
3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,
6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,
5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,
4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,
5,6,6,7,5,6,6,7,6,7,7,8};
return ones[(int)byte];
}
int main()
{
time_t start = clock();
int c = count1s(205);
time_t end = clock();
cout<<"count1: "<<c<<" time: "<<double(end-start)<<endl;
start = clock();
c = count1s2(205);
end = clock();
cout<<"count2: "<<c<<" time: "<<double(end-start)<<endl;
return 0;
}