题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解题思路
对于n来说,n&(n-1)能够将n的二进制表示中最右面的1变为0,比如n的二进制表示为xxx100,n-1的二进制表示为xxx011,显然进行一个&操作之后,最右面的1已经变为0,那么有多少次操作n可以变为0,n中就含有多少个1。
实现代码
class Solution {
public:
int NumberOf1(int n) {
int cnt=0;
while(n){
cnt++;
n&=n-1;
}
return cnt;
}
};