用按位与求解输入一个整数,输出此数字二进制中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左移