首页 > 试题广场 >

计算二进制数中1的个数

[编程题]计算二进制数中1的个数
  • 热度指数:531 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个int 数字,要求计算出int数字对应的二进制中1的个数
示例1

输入

15

输出

4

备注:
int数字大于0

最简单的一个个位数判断

public int count(int n){
    int count = 0;
    while(n != 0){
        count += n & 1;
        n >>>= 1;
    }
    return count;
}

换一种思维,每次都获取到一个1然后删去

public int count(int n){
    int count = 0;
    while(n != 0){
        n = n & (n-1);
        count++;
    }
    return count;
}

原理:每次-1会将这个数改变得到一个新的数:右边第一个1右边的0变为1,然后右边第一个的10
将这个新得到数和原本的数相与就能将右边第一个10

例子: n = 100100
则 n - 1 = 100011
二者相与得到 100000
然后 count++ 成功统计到一个1
直到全为 0 停止

发表于 2021-01-29 11:48:25 回复(0)
public static int get1Num(Integer i) {
        int sum = 0;
        if (i != null) {
            while (i > 0) {
                sum += (i % 2);
                i >>= 1;
            }
        }
        return sum;
    }

发表于 2021-01-28 17:22:03 回复(0)
int countBit(int n ) {
    int count = 0;
    while(n)
    {
        n = n & (n-1);
        count++;
    }
    return count;
}

发表于 2022-08-08 13:18:21 回复(0)
int countBit(int n ) {
    // write code here
    int count = 0;
    while(n)
    {
        count += n & 1;
        n >>= 1;
    }
 
    return count;
}

编辑于 2022-10-07 13:13:04 回复(0)