#include<stdio.h>
int 求两个数的二进制数不相同位数(int m,int n)
{
int count = 0;
int temp=m^n;
while (temp)
{
temp = temp & (temp - 1);
count++;
}
return count;
}
void main()
{
printf("请输入2个整数:>");
int m,n;
scanf("%d%d",&m, &n);
int z;
z = 求两个数的二进制数不相同位数(m,n);
printf("z=%d",z);
}
我采用的是异或来求不同位,异或是相同为0不同为1。
举个例子:16,12,这两个整数的二进制数分别为10000 01100,两个数异或得到11100。再将11100减1,为11011,再相与,11000,这样就会将异或中最右边的1慢慢消掉,直到temp==0,退出循环。