按位与 求二进制中1的个数

问题遇到的现象和发生背景

用按位与求解输入一个整数,输出此数字二进制中1的个数

问题相关代码,请勿粘贴截图
#include<stdio.h>
int fx(int a){
int count=0;
//for(int i=0;i<32;i++){
//if((a&(1<<i))==1){
    //count++;
for(int i=0;i<32;i++){
if(((a>>i)&1)==1){ //把输入的数二进制左移i位,按位与 1 
    count++;
}
}
return count;
}

int main(){
int num;
scanf("%d",&num);
printf("二进制中1的个数为%d",fx(num));
return 0;
}

运行结果及报错内容

代码运行正常

我的解答思路和尝试过的方法

把输入的整数右移 做和1 按位与就正常 但是注释掉内容:把1左移按位与此整数 运行结果不正确

我想要达到的结果

求讲讲。



111000 & 001000 = 001000
这个结果不等于1,所以不可以用1左移