两个整数二进制位不同个数
本题可以用多种方法求解:
第一种:
首先想到的就是将两个数中的每一位取出来,然后进行判断是否相等,代码实现:
#include<stdio.h>
int count_bit_diff(int a,int b)
{
int i=0,count=0;
for(i=0;i<32;i++)
{
if((a>>i&1)!=(b>>i&1))
count++;
}
return count;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("a,b二进制中不同的个数:%d",count_bit_diff(a,b));
return 0;
}
对于将两个数的每一位取出来也有很多种方法,列如我们所熟悉的将十进制中的每一位取出来的方法:%10,——>/10,想得到二进制中的每一位也就可以%2——>/2
第二种:
通过对异或操作符的学习可知:如果两个数一样结果为0,两个数不一样结果为1
这就给我们提供了思路:现将两个数异或,再判断异或之后1的个数,代码实现:
#include<stdio.h>
int count_bit_diff(int a,int b)
{
int c=a^b,count=0;
while(c)
{
c=c&(c-1);
count++;
}
return count;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",count_bit_diff(a,b));
return 0;
}
在这个代码思路中也有很多方法实现二进制中1的个数的计算:最容易想到的就是: 移位再&1
还有其他方法的可以相互交流