【C language】统计某数中二进制1的个数

题解:统计某数中二进制1的个数(取模法 + 看某位是1/0法 + 干掉最右边的1法)

目录

1.题目

题目:设计一个程序,统计某数中二进制1的个数

2.取模法

c 复制代码
int main()
{
	int num = 15;
	int count = 0;
	while (num)
	{
		if (num % 2 == 1) count++;
		num /= 2;
	}

	printf("count = %d\n", count);
	return 0;
}

缺点:当num < 0时,result error!!!

示例:

3.看某位是1/0

确定某一位是0/1,公式如下
公式:ret = (n >> i) & 1

详情:LINK

c 复制代码
int main()
{
	int num = -1;
	int count = 0;
	int i = 0;
	while (i < 32)
	{
		if (((num >> i) & 1) == 1) count++;
		i++;
	}
	printf("count = %d\n", count);
	return 0;
}

4.干掉最右边的1

干掉二进制最右边的1,公式如下:
公式:ret = n & (n - 1)

详情:LINK

c 复制代码
int main()
{
	int num = -1;
	int count = 0;
	while (num)
	{
		num = (num & (num - 1));
		count++;
	}

	printf("count = %d\n", count);
	return 0;
}

EOF

相关推荐
phltxy3 分钟前
C 语言自定义类型:结构体、位段、枚举与联合体
c语言·开发语言
大侠归来1 小时前
C语言与C++在基础语法上的区别
java·c语言·c++
cu1432 小时前
细谈GM8229的具体功能与其应用
c语言·c++·人工智能·单片机
大侠归来4 小时前
C语言内存管理:从栈到堆的完整指南
c语言·开发语言·python
cu1434 小时前
细谈GM7123C的具体功能与其应用
c语言·c++·人工智能·嵌入式硬件
Logic1014 小时前
C语言/数据结构位运算题解:异或XOR找出弹子游戏机中数量为奇数的数字——只出现奇数次
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
晓蛋6 小时前
二级C语言成绩查询方法
c语言·计算机等级考试·成绩查询·官网登录·准考证号
光子物联单片机7 小时前
STM32传感器模块编程实践(二十二)DIY智能WIFI视频控制小车
c语言·stm32·单片机·嵌入式硬件·音视频
老王爱玩车7 小时前
深入理解指针5
c语言·开发语言·学习
Navigator_Z7 小时前
LeetCode //C - 1275. Find Winner on a Tic Tac Toe Game
c语言·算法·leetcode