求一个整数存储在内存中的二进制中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的个数的主要内容,如果未能解决你的问题,请参考以下文章

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

[NewCoder]求int型正整数在内存中存储时1的个数

华为机试HJ15:求int型正整数在内存中存储时1的个数

HJ15 求int型正整数在内存中存储时1的个数_Scala

HJ15 求int型正整数在内存中存储时1的个数_Scala

HJ15 求int型正整数在内存中存储时1的个数_Scala