描述
输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。
数据范围:1<=n<=231−1
即范围为:−2147483648<=n<=2147483647
示例1
输入:
10
返回值:
2
说明:
十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010,其中有两个1。
示例2
输入:
-1
返回值:
32
说明:
负数使用补码表示 ,-1的32位二进制表示为1111 1111 1111 1111 1111 1111 1111 1111,其中32个1
思路:
![](https://img-blog.csdnimg.cn/img_convert/3305be0aea22b87c49a55e52848e5f85.png)
题解:
class Solution {
public:
int NumberOf1(int n) {
int cnt = 0;
while (n != 0) {
cnt++;
//去掉一个数n中的最后一位二进制位上的1的操作:n & (n - 1)
n = n & (n - 1);
}
return cnt;
}
};