What is a ^ b and (a amp; b) lt;lt; 1?(什么是a^b和(aamp;b)lt;lt;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 = 3和b = 5
在二进制表示法中,它们是a = 0011和b = 0101
异或:
a^b是异或运算符。比较两位时,如果相同则返回0,如果不同则返回1。01^10 => 11
因此,当我们执行a^b时,结果将是0110。
AND+Shift
a&b执行逻辑与运算。仅当a = b = 1时才返回1。
在我们的示例中,结果是0001
<<将其移位(在右侧添加0),结果变为0010,这将carry变量设置为真。(只有0000为假)。
下一次迭代:
所有内容都会重复,但现在a = 0110和b = 0010(从上次执行开始Sum和carry)
现在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&;b)<;<;1?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:什么是a^b和(a&;b)<;<;1?
基础教程推荐
- 使用 jQuery 在悬停时交换 DIV 类 2022-01-01
- 最佳动态 JavaScript/JQuery 网格 2022-01-01
- CORS:当凭据标志为真时,无法在 Access-Control-Allow-Origin 中使用通配符 2022-01-01
- 带角度的选项卡:仅使用 $http 在单击时加载选项卡 2022-01-01
- 从快速中间件中排除路由 2022-01-01
- 在 Javascript 中使用 Fetch API 上传文件并显示进度 2022-01-01
- 即使每次插入第一个输入的值不同,第二个输入仍显示相同的输入值 2022-01-01
- HTML5 画布调整为父级 2022-01-01
- 当木偶师打开Chrome时,不能使用Chrome扩展 2022-01-01
- 逻辑运算符 ||在 javascript 中,0 代表 Boolean false? 2022-01-01
