题目10:
解法一:右移
int NumberOf1(int n)
{
int count=0;
while(n)
{
if(n&1)
count++;
n=n>>1;
}
return count;
}
出现的问题:当该数字是负数时,会陷入死循环。
常规解法
int NumberOf1(int n)
{
int count=0;
unsigned int flag=1;
while(flag)
{
if(n&flag)
count++;
flag=flag<<1;//左移
}
return count;
}
解法三:
解法二中循环移动的次数等于整数二进制的位数。以下是整数的二进制有几个1就移动几次的方法:
将一个整数减去1,就是把该二进制的最右边的1变
边的1变成了0,结果刚好是1000。
代码:
int NumberOf1(int n)
{
int count=0;
while(n)
{
++count;
n=(n-1)&n;
}
return count;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wangfengfan1/article/details/46775927