【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

相关推荐
是苏浙12 分钟前
零基础入门C语言之C语言内存函数
c语言·开发语言
闭着眼睛学算法2 小时前
【双机位A卷】华为OD笔试之【排序】双机位A-银行插队【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
AI柠檬4 小时前
C语言基于MPI并行计算矩阵的乘法
c语言·c++·算法
czy87874756 小时前
C语言实现观察者模式
c语言·观察者模式
代码雕刻家6 小时前
1.4.课设实验-数据结构-单链表-文教文化用品品牌2.0
c语言·数据结构
侯小啾7 小时前
【22】C语言 - 二维数组详解
c语言·数据结构·算法
qq_479875437 小时前
Linux time function in C/C++【2】
linux·c语言·c++
yuuki2332338 小时前
【数据结构】双向链表的实现
c语言·数据结构·后端
ol木子李lo8 小时前
Doxygen入门指南:从注释到自动文档
c语言·c++·windows·编辑器·visual studio code·visual studio·doxygen
代码雕刻家8 小时前
1.6.课设实验-数据结构-栈、队列-银行叫号系统2.0
c语言·数据结构