做C++练习题学到的。

n & n - 1 统计二进制中1的个数,这里考虑负数的情况需要先将其转换为无符号整数

统计二进制0的个数,使用 n | n + 1

class Solution {
public:
     int  NumberOf1(int n) {
       int res = 0;
       //  将其转为无符号整数
       unsigned int num = n;
       while (num > 0) {
         ++res;
         //  每次消除一个1
         num = num & (num - 1);
       }
       
       return res;
     }
};