题目:
实现一个函数,输入一个整数,输出该数二进制表示中1的个数。如9的二进制是1001,因此输入9输出2。
解法一:可能死循环
int num1(int n)
{
int count =0;
while(n)
{
if(n&1) count++;
n=n>>1;
}
return count;
}
上面的函数如果输入一个负数,如果一直做右一运算,最终这个数字就会变成0xFFFFFFFF而陷入死循环。
解法二:无死循环但效率低
int num1(int n)
{
int count =0;
unsigned int flag=1;
while(flag)
{
if(n&flag) count++;
flag=flag<<1;
}
return count;
}
解法三:有几个1只需要循环几次
int num1(int n)
{
int count =0;
while(n)
{
++count;
n=(n-1)&n;
}
return count;
}原文地址:http://blog.csdn.net/wtyvhreal/article/details/45244405