【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

相关推荐
WalterJau2 小时前
C 内存分区
c语言
csdn_aspnet4 小时前
C/C++ 两个凸多边形之间的切线(Tangents between two Convex Polygons)
c语言·c++·算法
剑心诀7 小时前
02 数据结构(C) | 线性表——顺序表的基本操作
c语言·开发语言·数据结构
m0_488633327 小时前
Windows环境下编译运行C语言程序,合适工具与方法很关键
c语言·windows·git·开发工具·编译器
m0_488633328 小时前
C语言变量命名规则、入门自学、运算符优先级及数据结构介绍
c语言·数据结构·运算符优先级·变量命名·入门自学
Book思议-8 小时前
【数据结构实战】川剧 “扯脸” 与栈的 LIFO 特性 :用 C 语言实现 3 种栈结构
c语言·数据结构·算法·
炸膛坦客10 小时前
单片机/C/C++八股:(二十一)include <> 和 include ““ 的区别
c语言·c++
Yupureki11 小时前
《Linux系统编程》12.基础IO
linux·运维·c语言·开发语言·数据库·c++
炸膛坦客11 小时前
单片机/C/C++八股:(十八)C/C++ 中 sizeof 和 strlen 的区别
c语言·c++
看山是山_Lau11 小时前
代码命名规范原则与原理
c语言·开发语言