简介
在本实验中,你将学习如何在C编程中使用位运算来计算整数中设置位(1)的数量。本实验包括三个步骤:读取整数输入、使用位运算计算设置位的数量以及打印计数。完成本实验后,你将更好地理解数论和离散数学概念,以及如何在C编程中应用它们。
本实验首先演示如何从用户读取整数输入,这是位计数练习的第一步。然后,它引入了一个函数,该函数使用位运算来计算给定整数中设置位的数量。最后,程序向用户显示设置位的计数。
在本实验中,你将学习如何在C编程中使用位运算来计算整数中设置位(1)的数量。本实验包括三个步骤:读取整数输入、使用位运算计算设置位的数量以及打印计数。完成本实验后,你将更好地理解数论和离散数学概念,以及如何在C编程中应用它们。
本实验首先演示如何从用户读取整数输入,这是位计数练习的第一步。然后,它引入了一个函数,该函数使用位运算来计算给定整数中设置位的数量。最后,程序向用户显示设置位的计数。
在这一步中,你将学习如何在C编程中读取整数输入以进行设置位计数。我们将创建一个简单的程序来演示整数输入。
首先,让我们为我们的位计数程序创建一个C源文件:
cd ~/project
nano bit_counter.c
现在,将以下代码添加到文件中:
#include <stdio.h>
int main() {
int number;
// 提示用户输入一个整数
printf("输入一个整数:");
// 读取整数输入
scanf("%d", &number);
// 显示输入的数字
printf("你输入的是:%d\n", number);
return 0;
}
让我们编译并运行该程序:
gcc bit_counter.c -o bit_counter
./bit_counter
示例输出:
输入一个整数:42
你输入的是:42
代码解释:
#include <stdio.h>
包含标准输入/输出库scanf("%d", &number)
从用户读取整数输入printf()
用于显示提示信息和输入的数字%d
是整数的格式说明符这个简单的程序演示了如何读取整数输入,这是我们设置位计数练习的第一步。
在这一步中,你将学习如何在C语言中使用位运算来计算整数中设置位(1)的数量。
让我们修改之前的bit_counter.c
文件来实现位计数:
cd ~/project
nano bit_counter.c
用以下代码替换之前的内容:
#include <stdio.h>
// 使用按位与运算计算设置位的函数
int countSetBits(int number) {
int count = 0;
while (number) {
// 检查最低有效位
count += number & 1;
// 将数字右移一位
number >>= 1;
}
return count;
}
int main() {
int number;
// 提示用户输入一个整数
printf("输入一个整数:");
scanf("%d", &number);
// 计算并显示设置位的数量
int setBitCount = countSetBits(number);
printf("%d 中的设置位数量:%d\n", number, setBitCount);
return 0;
}
编译并运行程序:
gcc bit_counter.c -o bit_counter
./bit_counter
示例输出:
输入一个整数:42
42 中的设置位数量:3
代码解释:
countSetBits()
函数使用位运算来计算设置位的数量number & 1
检查最低有效位(如果位被设置则返回1,否则返回0)number >>= 1
将数字右移一位,移动到下一位位运算分解:
这种方法使用最少的计算步骤有效地计算了整数中1的数量。
在这最后一步中,我们将改进我们的位计数程序,以提供更详细的输出,并演示打印设置位计数的不同方法。
让我们修改bit_counter.c
文件,以添加更全面的打印功能:
cd ~/project
nano bit_counter.c
用以下实现更新代码:
#include <stdio.h>
// 使用按位与运算计算设置位的函数
int countSetBits(int number) {
int count = 0;
while (number) {
count += number & 1;
number >>= 1;
}
return count;
}
int main() {
int number;
// 提示用户输入一个整数
printf("输入一个整数:");
scanf("%d", &number);
// 计算设置位的数量
int setBitCount = countSetBits(number);
// 以多种格式打印计数结果
printf("十进制数:%d\n", number);
printf("二进制表示:");
// 打印二进制表示
for (int i = 31; i >= 0; i--) {
int bit = (number >> i) & 1;
printf("%d", bit);
}
printf("\n");
// 打印设置位计数结果
printf("设置位的数量:%d\n", setBitCount);
printf("设置位的百分比:%.2f%%\n",
(float)setBitCount / 32 * 100);
return 0;
}
编译并运行程序:
gcc bit_counter.c -o bit_counter
./bit_counter
示例输出:
输入一个整数:42
十进制数:42
二进制表示:00000000000000000000000000101010
设置位的数量:3
设置位的百分比:9.38%
代码解释:
该程序现在提供了整数位组成的全面视图,显示了:
在本实验中,你首先学习了如何在C编程中读取整数输入。这涉及使用scanf()
函数捕获用户输入,并使用printf()
函数显示输入的数字。接下来,你实现了一个名为countSetBits()
的函数,该函数使用位运算来计算给定整数中设置位(1)的数量。此函数遍历数字的各个位,使用按位与运算检查最低有效位,然后将数字右移以移动到下一位。设置位的计数被累加并返回。