C语言-打印二进制数,并统计二进制中1的个数

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值