📜  count bit 1 c++ (1)

📅  最后修改于: 2023-12-03 15:14:15.855000             🧑  作者: Mango

C++代码片段:计算二进制中1的个数

目标

这篇文章的目标是向C++程序员介绍一种快速计算一个32位整数二进制表示中1的个数的方法。

问题

给定一个32位的无符号整数,你需要编写一个函数来计算它的二进制表示中1的个数。例如,输入整数3的二进制表示为"00000000000000000000000000000011",所以函数应该返回2。我们平时写程序时,可能会将数字转换成二进制字符串,然后统计其中1的个数。如果输入32位整数,这种方法显然很慢。

解决方案

更高效的方法是利用位运算:我们将该数字与二进制数"00000000000000000000000000000001"相与,判断最后一位是否为1,然后将该数字右移一位,再重复此过程,直到该数字变为0。

下面是用C++实现的代码片段:

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

代码解释如下:

  1. 首先,我们定义了一个int类型的count变量,用于计算二进制中1的个数;

  2. 接着,我们使用while循环对n进行位运算;

  3. 在每一次循环中,将n与二进制数"00000000000000000000000000000001"相与,判断最后一位是否为1;

  4. 如果最后一位为1,则将count加1;

  5. 然后将n右移一位,再次进入循环;

  6. 当n变为0时,跳出循环,函数返回计数器的值count。

性能分析

我们发现,该算法运行的时间复杂度为O(logn),其中n为输入的32位无符号整数。

以上就是如何在C++中快速计算一个32位整数二进制表示中1的个数的方式。

参考文献

https://www.geeksforgeeks.org/count-set-bits-in-an-integer/