C语言从键盘读入一个正整数n,求这个n对应的二进制数中有多少个1,利用位于运算
时间: 2024-09-06 12:07:41 浏览: 94
220个经典C程序源码文件,可以做为你的学习设计参考.zip
5星 · 资源好评率100%
在C语言中,要计算一个正整数n对应的二进制表示中有多少个1,你可以使用位运算来达到目的。可以遍历n的二进制形式,逐位检查每一位是否为1。这里是一个简单的算法:
```c
#include <stdio.h>
int countBits(int n) {
int count = 0; // 初始化计数器
while (n != 0) { // 当n还有非零位时
count += n & 1; // 如果最低位是1,则count加1
n >>= 1; // 右移一位,去掉最低位
}
return count;
}
int main() {
int n;
printf("请输入一个正整数: ");
scanf("%d", &n);
if (n >= 0) { // 检查输入是否合法
int ones = countBits(n);
printf("给定数字 %d 的二进制表示中有 %d 个1.\n", n, ones);
} else {
printf("错误:输入不是正整数.\n");
}
return 0;
}
```
在这个程序中,`countBits()` 函数通过`&`操作符获取n的最低位(即最右边),如果为1则`count`加1,然后通过右移`n`来去除最低位并继续检查。当所有位都被检查过,函数返回的就是1的数量。
阅读全文