求一个整数存储在内存中的二进制中1的个数
Posted yirenOAQ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个整数存储在内存中的二进制中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循环的判断条件上,我们改为
这样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;
}
以上是关于求一个整数存储在内存中的二进制中1的个数的主要内容,如果未能解决你的问题,请参考以下文章
HJ15 求int型正整数在内存中存储时1的个数_Scala