列表

详情


XM2. 懂二进制

描述

世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?

示例1

输入:

3,5

输出:

2

说明:

3的二进制为11,5的二进制为101,总共有2位不同

示例2

输入:

1999,2299

输出:

7

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 468KB, 提交时间: 2022-04-17

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    int countBitDiff(int m, int n) {
        int t = m ^ n;
        int count = 0;
        while(t){
            t = t & (t - 1);
            count++;
        }
        return count;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-06-26

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    int countBitDiff(int m, int n) {
        // write code here
        int r = m^n;
        int res = 0;
        
        while(r){
            if(r & 1)
                res++;
            r = r >> 1;
        }
        return res; 
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-06-25

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    int countBitDiff(int m, int n) {
        // write code here
        int res=m^n;
        int ad=1;
        int ans=res&ad;
        for (int i=1;i<32;++i){
            ad=ad<<1;
            ans+=(res&ad)>0;
        }
        return ans;
    }
};

C 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-06-03

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param m int整型 
 * @param n int整型 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int countBitDiff(int m, int n ) {
    //一个二进制数和1相与,就可以知道这个二进制数的最后一位是1还是0
    //右移一位=在左边添0(无符号数添0,有符号数添符号位)
    int cnt=0;//二进制位有多少位不同
    for(int i=0;i<32;i++)
    {
        if((m>>i&1)!=(n>>i&1)) cnt++; //右移i位,一位一位比较是否相同
    }
    return cnt;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-04-04

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    int countBitDiff(int m, int n) {
        // write code here
        int r = m ^ n;
        int res = 0;
        while(r)
        {
            r &= (r - 1);
            res++;
        }
        return res;
    }
};

上一题