^ 相同为0,反之为1,利用至一点,将两个数^得到一个数,含有不同个数个的1,再转化为求解二进制序列有多少个1,可以对n取余数,也可以对n&=n-1,&同时为1才为1,反之为0,利用这一特性,n&=n-1,每循环一次,计数一次,循环条件为n,直至n为0,不存在1,return count
int Fun(int a,int b)
{
int ret = a ^ b;
int count =0;
while (ret)
{
ret &= (ret - 1);
count++;
}
return count;
}
int main()
{
//0000 1100
//0000 0110
//^ 0000 1111
//0000 1111
//0000 1110
//0000 1110
int a = 5; //0000 0101
int b = 4; //0000 0100 0000 0001
//1
printf("%d\n", Fun(a, b));
return 0;
}