知识为进步之母,而进步又为富强之源泉。这篇文章主要讲述求一个整数存储在内存中的二进制中1的个数相关的知识,希望能为你提供帮助。
@TOC
设计思路&
(按位与)的定义是,只有两个数的二进制位的同一位都为1才得1,
为了知道一个未知数的二进制位中含有1的个数,我们可以将它的每一位,依次进行对比,若都为1则计数一次,直到统计完成后,计数的次数即为1的个数。
如此我们可以整理出这么一个思路
#define _CRT_SECURE_NO_WARNINGS 1
#include <
stdio.h>
#include <
stdlib.h>
//求一个整数存储在内存中的二进制中1的个数
int main()
{
int a = 0;
scanf("%d", &
a);
int count = 0;
int b = 1;
while (1)
{
//进行循环,一旦满足某一位是1,则count++
}
printf("二进制中1的个数为%d", count);
return 0;
}
在此基础上我们可以编写好while内部的代码:
为了让程序更为精炼,在while循环的判断条件上,我们改为
【求一个整数存储在内存中的二进制中1的个数】这样a的二进制位的最高位前的为0的位数就不用进行计算,更早的结束循环,减少程序的运行次数
#define _CRT_SECURE_NO_WARNINGS 1
#include <
stdio.h>
#include <
stdlib.h>
//求一个整数存储在内存中的二进制中1的个数
int main()
{
int a = 0;
scanf("%d", &
a);
int count = 0;
int b = 1;
while (a / b != 0)
{
if ((a &
b) == b)
{
count++;
}
b = b <
<
1;
//或者b *= 2;
也行,此处因为不会溢出,没有影响。
}
printf("二进制中1的个数为%d", count);
return 0;
}
推荐阅读
- next()和nextLine()的区别和使用
- 3分钟,看懂区间估计and置信区间
- 用python实现盲盒抽奖功能(减库存)
- Linux系列(去掉目录下文件列表后缀命令)
- Spring Data JDBC - 如何使用自定义 ID 生成
- 自动化会提高测试覆盖率,那测试覆盖率是什么()
- Linux系列(查看已安装的rpm包)
- springcloud alibaba企业落地实战(一文带你掌握nacos基础应用)
- 被问题包围的空降兵,如何破圈突围