二进制中1的个数

二进制中1的个数

二进制中1的个数_第1张图片
方法一:
输入x,进行32次右移位运算,每次&1(确定该位是否为1),若该位为1则在计数变量上加1,最后输出计数变量。

#include
using namespace std;
#define N 100005
int main(){
     
    int x,n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
     
        int res=0;
        scanf("%d",&x);
        for(int j=31;j>=0;j--)
        {
     
            if((x>>j)&1) res++;
        }
       printf("%d ",res);
    }

    return 0;
}

方法二:
-x的二进制等于x的二进制每一位取反再在最后一位上加1,-x与x的二进制相比,只有最后一个1以及后面位数相同,所以x&(-x)可得到相同部分。x减去相同部分后,再次进行上述操作并计数,直到x为0,输出计数变量。

#include
using namespace std;
int main(){
     
    int n,x;
    scanf("%d",&n);
    while(n--)
    {
     
        int res=0;
        scanf("%d",&x);
        while(x)
        {
     
             x-=(x&(-x));
             res++;
        }
            printf("%d ",res);
    }
    return 0;
}

待八戒审核,不敢懈怠…

你可能感兴趣的:(c++)