求一个整数存储在内存中的二进制中1的个数

知识为进步之母,而进步又为富强之源泉。这篇文章主要讲述求一个整数存储在内存中的二进制中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; }


    推荐阅读