1. 数数字二进制表示中1的个数
参考《编程之美》代码,如下三个方法(剩余两种方法不考虑)
对于Count1,无论正数还是负数,否可以正确数出其中1的个数。而对于 Count2,如果参数写为int v,传递负数,则进入死循环,而对于Count3,如果为负数,其中的符号位上的1无法计数。
#include <iostream>
using namespace std;
int Count( int v)
{
int num = 0;
while(v)
{
v &= (v-1);
num++;
}
return num;
}
int Count2(unsigned int v)
{
int num = 0;
while(v)
{
num += v & 0x01;
v >>= 1;
}
return num;
}
int Count3( unsigned int v)
{
int num = 0;
while(v)
{
if(v%2 == 1)
{
num++;
}
v /= 2;
}
return num;
}
int main()
{
cout << "The Count of 1: " << Count(-1) << endl;
cout << "The Count of 1: " << Count2(-1) << endl;
cout << "The Count of 1: " << Count3(-1) << endl;
return 0;
}
By Andy @ 2013-09-14