11、二进制中1的个数

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
1、暴力计数(循环次数等于n的二进制长度,如n=257循环9次)

class Solution {
public:
     int  NumberOf1(int n) {
          for(unsigned int r = 0, m = n; ; r += m & 1, m >>= 1)
              if(m == 0)
                  return r;
     }
};

2、利用lowbit优化(循环的次数等于n的二进制中1的个数,如n=257循环2次)

class Solution {
public:
     int  NumberOf1(int n) {
         for(unsigned int r = 0, m = n; ; ++r, m -= m & -m)
             if(m == 0)
                 return r;
     }
};

猜你喜欢

转载自blog.csdn.net/weixin_44139400/article/details/86546039