要在 C 中编写一个函数来计算一个 unsigned int
变量中比特为 1 的位数,你可以使用多个方法,其中最常用的方法之一是使用逐位检查法。我们可以通过右移和位与操作逐位检查这个变量中的每个位,统计比特为 1 的总数。
方法1:逐位检查法
这个方法简单直观,通过逐位移和位与操作来统计比特为 1 的位数。
#include <stdio.h>
// 计算一个无符号整数中比特为1的位数
unsigned int count_bits(unsigned int n) {
unsigned int count = 0;
while (n) {
count += n & 1;
n >>= 1;
}
return count;
}
int main() {
unsigned int number = 29; // 二进制: 11101,3个比特为1
printf("The number of 1 bits in %u is %u.\n", number, count_bits(number));
return 0;
}
方法2:Brian Kernighan 算法
另一种高效算法是使用 Brian Kernighan 算法,每次迭代中都将数值的最低有效1位清零,直到数值为零。
#include <stdio.h>
// 计算一个无符号整数中比特为1的位数 (使用 Brian Kernighan 算法)
unsigned int count_bits(unsigned int n) {
unsigned int c