懂二进制 位运算亦或

题目描述
世界上有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
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务