请编写一个C语言程序,输入一个整数,输出该整数的二进制表示形式,并计算其二进制表示中有多少个’1’。 要求: a) 使用位运算(&、|、^、<<、>>等)来实现功能。 b) 提供一个函数将整数转换为二进制字符串表示。 c) 提供一个函数计算二进制表示中的'1'的个数。
时间: 2024-09-09 14:12:24 浏览: 126
```c
#include <stdio.h>
#include <string.h>
// 函数:将整数转换为二进制字符串
char* int_to_binary(int num) {
static char binary[33]; // 存储二进制字符串,大小足够处理32位整数
int i = 0;
if (num == 0) {
binary[i++] = '0'; // 如果是0,直接返回"0"
} else {
while (num > 0) {
binary[i++] = num % 2 + '0'; // 取余数并转成字符(0或1)
num /= 2; // 向右移除最低位
}
binary[i] = '\0'; // 添加终止符
// 将字符串反转,因为低位在前
for (int j = 0, k = strlen(binary)-1; j < k; ++j, --k) {
char temp = binary[j];
binary[j] = binary[k];
binary[k] = temp;
}
}
return binary;
}
// 函数:计算二进制表示中的'1'的个数
int count_bits(char* binary) {
int count = 0;
for (int i = 0; binary[i] != '\0'; ++i) {
if (binary[i] == '1') {
count++;
}
}
return count;
}
int main() {
int input_num;
printf("请输入一个整数:");
scanf("%d", &input_num);
char* binary_str = int_to_binary(input_num);
printf("该整数的二进制表示为:%s\n", binary_str);
int ones_count = count_bits(binary_str);
printf("二进制表示中有 %d 个 '1'\n", ones_count);
free(binary_str); // 释放动态分配的内存
return 0;
}
```
阅读全文