题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
思路:
考察位运算,最优做法:把一个整数减去1再与原来的整数做位与运算,得到的结果相当于把整数的二进制表示中最右边的1变成0.
这样有多少个1就循环多少次
C++
class Solution {
public:
int NumberOf1(int n) {
int cnt = 0;
while(n){
n = (n - 1) & n;//移走最右边的1
++cnt;
}
return cnt;
}
};