解法来源剑指offer,题10
1.可能引起死循环的解法
int NumberOf1(int n)
{
int count = 0;
while(n)
{
if(n&1)
count++;
n = n >> 1;
}
return count;
}
若为负数如0x80000000移位为0xC0000000,最终变为0xFFFFFFFF陷入死循环。
2.better
int NumberOf1(int n)
{
int count = 0;
unsigned int flag = 1;
while(flag)
{
if(n & flag)
count++;
flag = flag << 1;
}
return count;
<pre name="code" class="cpp"> }
3.best
int NumberOf1(int n)
{
int count = 0;
while(n)
{
count++;
n = (n - 1) & n;
}
return count;
}