懂二进制 位运算亦或
题目描述
世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
示例1
输入
复制
1999 2299
输出
复制
7
两种写法,本质上是一样的
class Solution {
public:
/** * 获得两个整形二进制表达位数不同的数量 * * @param m 整数m * @param n 整数n * @return 整型 */
int countBitDiff(int m, int n) {
#if 0
n ^= m; //按位异或后不同的位一定是1,统计出来就行了
m = 0;
while(n) {
m += (n & 1);
n >>= 1;
}
return m;
#else
int ans = 0;
while(n || m) {
ans += ((n&1) != (m&1)); //直接比较
n >>= 1;
m >>= 1;
}
return ans;
#endif
}
};