法一:两个数每一位分别与1相与比较,若二者对应位与1相与(0&1=0,1&1=1)结果不同,则表示该位二进制数不同,count++
int count_diff_bit(int m,int n)
{
int i=0;
int count=0;
for(i=0;i<32;i++){
if(((m>>i)&1)!=((n>>i)&1)){
count++;
}
}
return count;
}
法二:两数异或,在计算异或(相同为0,相异为1)后的结果中有多少个二进制位为1的
int count_diff_bit(int m,int n)
{
int i=0;
int count=0;
int ret=0;
ret=m^n;
//统计一下ret中二进制位有几个1
while(ret){
ret=ret&(ret-1);
count++;
}
return count;
}
主函数:
int main(){
int m=0;
int n=0;
scanf("%d %d",&m,&n);
int ret=count_diff_bit(m,n);
printf("%d\n",ret);
return 0;
}
运行结果:
7对应二进制:00000000 00000000 00000000 00000111
8对应二进制:00000000 00000000 00000000 00001000