什么是a^b和(a&b)<<1? [英] What is a ^ b and (a & b) << 1?

查看:31
本文介绍了什么是a^b和(a&b)<<1?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用leetcodequestion执行此操作。

请求:

计算两个整数a和b的和,但不允许使用运算符+和-。

我听不懂它提供的解决方案

有人能解释一下此getSum函数的工作原理吗?

以下是JS中的答案:

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
var getSum=function(a,b) {
    const Sum = a^b; //I can't understand how those two line's code can
    const carry = (a & b) << 1; //get the sum
        if(!carry) {
            return Sum
        }
    return getSum(Sum,carry);
};
console.log(getSum(5,1));

推荐答案

让我们通过示例学习。想象一下a = 3b = 5

在二进制表示法中,它们是a = 0011b = 0101

异或: a^b是异或运算符。比较两位时,如果相同则返回0,如果不同则返回101^10 => 11

因此,当我们执行a^b时,结果将是0110

AND+Shift

a&b执行逻辑与运算。仅当a = b = 1时才返回1。

在我们的示例中,结果是0001

<<将其移位(在右侧添加0),结果变为0010,这将carry变量设置为真。(只有0000为假)。

下一次迭代:

所有内容都会重复,但现在a = 0110b = 0010(从上次执行开始Sumcarry)

现在a^b = 0100(a&b)<<1 = 0100

再次重复。

现在a^b = 0000(a&b)<<1 = 1000

现在a^b = 1000(a&b)<<1 = 0000。现在,carry终于是false。我们返回的1000是十进制8

3+5=8开始一切正常

这篇关于什么是a^b和(a&amp;b)&lt;&lt;1?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆