#include <iostream>
int NumberOf1(int n)
{
int count = 0;
while (n)
{
count++;
n = n&(n - 1);
}
return count;
}
这样的解法不会产生负数陷入死循环的问题,并且循环次数少,有几个1就循环几次。
采用这种解法的原因:
例:n = 11000100
n-1 = 11000011,把n最右边的1后面的0全变成1,把n最右边的1变成0
n & (n-1) = 11000000;去掉n中最右边的1抹掉
这样每次减少n中的一个1;count++;计数
最后返回count;