关闭

将整数A转换为B

63人阅读 评论(0) 收藏 举报
分类:

如果要将整数A转换为B,需要改变多少个bit位?【关于二进制还需要进一步学习 参考了别的方法 但理解并不透彻】

样例

如把31转换为14,需要改变2个bit位。

(31)10=(11111)2

(14)10=(01110)2

class Solution {
    /**
     *@param a, b: Two integer
     *return: An integer
     * 二进制只能表示整数,负数的二进制是补码形式表示,所以如果单纯除2无法直接得到负数的二进制
     * 借由一个flag flag从1开始,每次运算之后左移1位, 也就是10,100,1000,等等
     * 直到1超过32位或64位,flag变成0
     * 我们将a,b 分别于flag进行与(&)运算,与运算定义是,只有运算双方都为1时候,结果才为1. a & flag,
     * 运算结果是a[i]=1时候,结果为1, a[i]=0时候,结果为0。b[i]的运算性质和a[i]一致。
     * 因此通过比较a & flag 和 b & flag, 可以得到对应位数的值是否相同。
     */
    public static int bitSwapRequired(int a, int b) {
        // write your code here
        int change = 0;
        int flag = 1;
        int i=0;
        int j=0;
        while(flag!=0){
            i = a & flag;
            j = b & flag;
            if((i ^ j)!=0)
                change++;
            flag = flag<<1;
        }
        return change;
    }
};

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6729次
    • 积分:934
    • 等级:
    • 排名:千里之外
    • 原创:91篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    最新评论