【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

相关推荐
SongYuLong的博客19 分钟前
开源 C 标准库(C Library)
c语言·开发语言·开源
坚持编程的菜鸟25 分钟前
模拟实现qsort库函数排序整型和结构体
c语言
A charmer1 小时前
内存泄漏、死锁:定位排查工具+解决方案(C/C++ 实战指南)
c语言·开发语言·c++
神圣的大喵2 小时前
3、第三章 通用的按键代码(上)(嵌入式高级应用篇)
c语言·嵌入式·按键库
Cuit小唐2 小时前
指针函数和函数指针
c语言
缘三水3 小时前
【C语言】10.操作符详解(下)
c语言·开发语言·c++·语法·基础定义
矜辰所致3 小时前
CH58x 主机扫描事件相关应用(扫描到广播包)
c语言·蓝牙主机·ble 广播包·广播包过滤·广播名称过滤
高级盘丝洞3 小时前
openPOWERLINK c读取数据并送到mqtt
c语言·开发语言
EXtreme354 小时前
链表进化论:C语言实现带哨兵位的双向循环链表,解锁O(1)删除的奥秘
c语言·数据结构·性能优化·双向链表·编程进阶·链表教程
量子炒饭大师4 小时前
David自习刷题室——【蓝桥杯刷题备战】乘法表
c语言·c++·git·职场和发展·蓝桥杯·github·visual studio