二进制中1的个数

last modify

二进制中1的个数_牛客题霸_牛客网arrow-up-right

问题简述

输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。

思路1:利用x & 1和逻辑右移

  • 按位统计 1 的个数

  • 负数的处理:

    • C++/Java 中负数按补码形式存储;使用逻辑右移

      • C++ 的逻辑右移:x = (unsigned)x >> 1;

      • Java 的逻辑右移:x >>>= 1;

    • Python:先转成补码;

      • 转补码:x = n & 0xffffffff

chevron-rightC++hashtag
class Solution {
public:
     int NumberOf1(int x) {
         int cnt = 0;
         while (x) {
            if (x & 1) cnt += 1;
            x = (unsigned)x >> 1;  // C++ 中逻辑右移要先转无符号
         }
         
         return cnt;
     }
};
chevron-rightJavahashtag
public class Solution {
    public int NumberOf1(int x) {
        int cnt = 0;
        while (x != 0) {
            if ((x & 1) != 0) cnt += 1;
            x >>>= 1;  // Java 中的逻辑右移
        }
        return cnt;
    }
}
chevron-rightPython 写法1:转补码hashtag
chevron-rightPython 写法2:统计 0 的个数hashtag

思路2:利用x & (x-1)

  • x & (x-1) 每次将最右边的一个 1 转成 0;

chevron-rightC++hashtag
chevron-rightPythonhashtag

Last updated