当前位置:首页 C++ > 正文

C++如何计算二进制数中1的个数

作者:野牛程序员:2023-06-28 07:41:43 C++阅读 3927

在C++中,你可以使用位运算来计算一个二进制数中1的个数。以下是两种常见的方法:

方法一:使用位运算和循环

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

在这个方法中,我们使用一个循环来迭代检查num的每一位。通过使用位运算符&和1,我们可以检查num的最低位是否为1,如果是的话,将计数器count加1。然后,我们将num右移一位,继续检查下一位,直到num变为0。

在这行代码中,num & 1是一个位运算操作,它用于获取num的最低位的值。位运算符&对两个操作数的位进行逻辑与操作,结果是一个新的值,其中只有在对应位都为1时才为1,否则为0。

具体而言,num & 1的结果是一个整数,该整数只有最低位与1相同,其它位都为0。如果num的最低位为1,则num & 1的结果为1;如果num的最低位为0,则num & 1的结果为0。

count += num & 1的作用是将num的最低位的值加到count上。如果num的最低位为1,count就会增加1;如果num的最低位为0,count不会增加。

通过在循环中使用这行代码,我们可以逐个检查num的每一位,并将1的个数累加到count上。最终,count的值就是num中1的个数。

方法二:使用位运算和Brian Kernighan's算法

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

这种方法使用了Brian Kernighan's算法,它通过每次执行num &= (num - 1)将num的最右边的1变为0来计算1的个数。我们在每次执行该操作后将计数器count加1,直到num变为0。

使用这两种方法,你可以计算一个二进制数中1的个数。例如,假设你有一个二进制数110101,你可以调用countOnes(0b110101)来计算其中的1的个数。



野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击