📅  最后修改于: 2023-12-03 15:14:15.855000             🧑  作者: Mango
这篇文章的目标是向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;
}
代码解释如下:
首先,我们定义了一个int类型的count变量,用于计算二进制中1的个数;
接着,我们使用while循环对n进行位运算;
在每一次循环中,将n与二进制数"00000000000000000000000000000001"相与,判断最后一位是否为1;
如果最后一位为1,则将count加1;
然后将n右移一位,再次进入循环;
当n变为0时,跳出循环,函数返回计数器的值count。
我们发现,该算法运行的时间复杂度为O(logn),其中n为输入的32位无符号整数。
以上就是如何在C++中快速计算一个32位整数二进制表示中1的个数的方式。
https://www.geeksforgeeks.org/count-set-bits-in-an-integer/