题目:计算一个整数二进制位中1的个数。要求效率尽可能的高。
且能正确求正数和负数的二进制中1的个数。
//二进制中1的个数
int CountOf1One(int num)
{
//但是如果不知道是多少位的机器,冒然给出的32会让人很费解
//所以修改如下
int count = 0;
int i = 1;
while(i<=32)
{
int flag = num & i;
if(flag)
count++;
i = i<<1;
}
return count;
}
int CountOf1Two(int num)
{
int count = 0;
int flag = 1;
//用当flag左移至全部为0时也就知道了该机器的位数,增加代码的可读性
while(flag)
{
if(num & flag)
count++;
flag = flag << 1;
}
return count;
}
//以上两种方法皆是根据机器位数决定该循环的次数
//下面我们让这个程序有几个1就循环几次
int CountOf1Three(int num)
{
int count = 0;
while(num)
{
count++;
num = num & (num-1);
}
return count;
}