懂二进制 位运算亦或

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

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务