将整数A转换为B

探讨如何将整数A转换成B,关注点在于二进制位的变化。例如,将十进制的31转换为14,转换过程中涉及2个bit位的改变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果要将整数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;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值