/*
打印二进制数,并统计二进制中1的个数
题目内容:
写一个函数,打印其参数的二进制数,并返回二进制中1的个数
比如15, 00000000 00000000 00000000 00001111 4个1
*/
#include <stdio.h>
//int整型转为二进制数
void ToBin(int n) {
char ch;
int i = 0;
for (i = 31; i >= 0; i--) {
ch = (1 << i) & n ? '1' : '0';
printf("%c", ch);
}
printf("\n");
}
//统计二进制中1的个数
//方式一:使用%2和/2
//int Count(int n) { //这个接收参数,不适用负整型数
//int Count(unsigned int n) { //加上unsigned,就可以将接收的负整型看做正整型
// int count = 0;
// while (n) {
// if ((n % 2) == 1) { //模2得到的就是二进制中最后那位
// count++;
// }
// n /= 2; //最后那位之前的所有位
// }
// return count;
//}
//方式二:很难想到公式n = n & (n - 1);每运算一次就会消掉末尾的1
// 0101 n
// 0100 n-1
// 0100 n 第一次&计算结果
// 0011 n-1
// 0000 n 第二次&计算结果
//int Count(int n) {
// int count = 0;
// while (n) {
// n = n & (n - 1);
// count++;
// }
// return count;
//}
//方式三: 使用 n&1的结果来判断此二进制位是0还是1
int Count(int n) {
int count = 0;
int i = 0;
for(i = 31; i >= 0; i--) {
if (((1 << i) & n)) {
count++;
}
}
return count;
}
//int整型转为二进制数,并统计二进制中1的个数
//int CountAndToBin(int n) {
// int count = 0;
// int i = 0;
// for (i = 31; i >= 0; i--) {
// if (((1 << i) & n)) {
// count++;
// printf("%c", '1');
// }
// else {
// printf("%c", '0');
// }
// }
// printf("\n");
// return count;
//}
int main() {
int n = 0;
scanf_s("%d", &n);
ToBin(n);
printf("%d\n",Count(n));
//printf("%d\n", CountAndToBin(n));
return 0;
}

本文介绍了如何使用C语言编程,将十进制数转换为二进制形式输出,并统计二进制表示中1的个数。通过实例代码解析,帮助读者理解相关算法和技巧。

被折叠的 条评论
为什么被折叠?



