#include <iostream>
using namespace std;
/*
算法思想:先把两个数字异或,异或的结果中有几个1就表示有这些位不同,
即,改变这些位(1变成0,0变成1)就能使他们相同,
此外,使用(c & (c - 1))可以使c的最低有效位(1的位)变成0
*/
int bitNeedChanged(int a, int b)
{
int count = 0;
for (int c = a ^ b; c; c &= (c - 1))
{
count++;
}
return count;
}
int main()
{
cout << bitNeedChanged(15, 20) << endl;
getchar();
return 0;
}