相关题目链接:求两个整数二进制位不同个数
基础方法,循环32次,每次都比较两数末位,随后进行移位操作
#include<stdio.h>
int main()
{
int a=0;
int b=0;
scanf("%d %d",&a,&b);
int count=0;
for(int i=0;i<32;i++)
{
if((a&1)!=(b&1))//判断ab末位是否相同
{
count++;
}
a=a>>1;//末位比较完进行移位,比较下一位
b=b>>1;
}
printf("%d",count);
}
进阶方法:将ab两数异或,异或的结果为c,c的某位上是1说明ab那位是相异的,为0则是相同
得到c之后,计算c里面0的个数即可(这里是求不同位,如果求相同位就是计算1的个数)
#include<stdio.h>
int main()
{
int a=0;
int b=0;
scanf("%d %d",&a,&b);
int count=0;
int c=a^b;
while(c)
{
c=c&(c-1);
count++;
}
printf("%d",count);
}