【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

相关推荐
liu****13 分钟前
12.C语言内存相关函数
c语言·开发语言·数据结构·c++·算法
!停28 分钟前
深入理解指针(2)
c语言
Tandy12356_1 小时前
手写TCP/IP协议栈——无回报ARP包生成
c语言·c++·tcp/ip·计算机网络
赖small强1 小时前
【Linux C/C++开发】C语言函数深度技术指南 (Deep Dive into C Functions)
linux·c语言·函数指针·stack frame
前端世界1 小时前
C 语言项目实践:用指针实现一个“班级成绩智能分析器”
c语言·开发语言
Less is moree2 小时前
3.C语言文件操作:写操作fputc(),fputs(),fwrite()
c语言·开发语言
!停2 小时前
深入理解指针(1)
c语言
sinat_602035362 小时前
翁恺 9取地址运算
c语言
古城小栈2 小时前
Go 72变之 编成 C语言
c语言·python·golang
hefaxiang3 小时前
分支和循环(中)
c语言·开发语言