【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

相关推荐
试剂小课堂 Pro21 小时前
Ald-PEG-Ald:丙醛与聚乙二醇两端连接的对称分子
java·c语言·c++·python·ffmpeg
LYS_061821 小时前
寒假学习(7)(C语言7+模数电7)
c语言·学习·算法
爱吃生蚝的于勒21 小时前
【Linux】进程信号的产生(一)
linux·运维·服务器·c语言·开发语言·数据结构·c++
W_a_i_T21 小时前
【Coding日记】菜鸟编程C语言100例——第三题⚠️
c语言·开发语言·经验分享·算法·菜鸟编程
Hello World . .21 小时前
C语言printf: VT100 终端控制码
c语言·开发语言·jvm
你怎么知道我是队长21 小时前
C语言---排序算法2---选择排序法
c语言·算法·排序算法
你怎么知道我是队长21 小时前
C语言---排序算法3---插入排序法
c语言·算法·排序算法
m0_748248651 天前
C/C++ 项目与 Rust 项目区别
c语言·c++·rust
月如琉璃1 天前
内存泄漏检测实战——Valgrind
c语言·内存泄漏·用户态内存泄漏
养军博客1 天前
C语言五天算法速成(可用于备考蓝桥杯)
c语言·算法·蓝桥杯