《编程之美》里的一道思考题:
给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A 和B 的二进制表示中有多少位是不同的?
#include <iostream>
inline int BitsOf(unsigned int n)
{
int cnt = 0;
while(n)
{
n&=n-1;
cnt++;
}
return cnt;
}
inline int MinBitDiff(unsigned int a,unsigned int b)
{
return BitsOf((a|b)&(~(a&b)));
}
int main()
{
std::cout<<MinBitDiff(0xa0,0xa7);
std::cout<<MinBitDiff(0xa4,0x57);
std::cout<<MinBitDiff(0xaf,0xf7);
}