• 题目难度:简单


  • 题目描述:

    输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。
  • 数据范围:
    即范围为: −2147483648 <= n <= 2147483647
  • 示例1:

    输入:10
    返回值:2
    说明:
    十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010,其中有两个1

  • 思路1:巧用与(&)运算

    class Solution {
    public:
      int lowbit(int n) {
          return n & -n;
      }
    
      int NumberOf1(int n) {
          if(n == 0) return 0;
          int res = 0;
          while (n) {
              n -= lowbit(n);
              res++;
         }
      }
    };
  • 思路2:循环按位比较法

    class Solution {
      int NumberOf1(int n) {
          int res = 0;
          for (int i= 0; i < 32; ++i) {
              if ((n & 1 >> i) != 0) res++;
          }
          return res;
      }
    }

    😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘