c语言位运算 求1个整数的二进制数有多少个1

如题所述

#include<stdio.h>
int solve(int n)
{
    int ans=0;
    while(n)
        ans+=n&1,n>>=1;
    return ans;
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d的二进制数有%d个1。\n",n,solve(n));
    return 0;
}

第一种方法:简单的运算一个整数中二进制中1的个数,位运算用了&和>>符号,即与和右移。时间复杂度为log2(n)。

#include<stdio.h>
int solve(int n)
{
    int ans=0;
    while(n)
        ans++,n&=(n-1);
    return ans;
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d的二进制数有%d个1。\n",n,solve(n));
    return 0;
}

第二种方法:通过不断的去掉二进制中最右端的1,来计算整数二进制中1的个数,时间复杂度和二进制中1的个数有关。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网