二进制中一的个数
题目链接
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
巧用位运算
n &= n-1
的作用:消去n最低位的1。例子:当n=1010时,n-1=1001,此时n & n-1= 1000
,达到了使二进制最低位的1变成0的效果。要想知道二进制中有多少个1,可以理解为要消去多少次最低位的1,记录次数即可。
时间复杂度O(logn)
class Solution {
public:
int NumberOf1(int n) {
int cnt = 0;
while (n != 0)
{
n &= (n - 1);
cnt++;
}
return cnt;
}
};