给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。
示例 1:
输入:a = 1, b = 2
输出:3
示例 2:
输入:a = 2, b = 3
输出:5
提示:
-1000 <= a, b <= 1000
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sum-of-two-integers
(1)位运算_递归
(2)位运算_非递归
//思路1————位运算_递归
class Solution {
public int getSum(int a, int b) {
if (b == 0) {
return a;
}
/*
^:异或运算,运算规则为相异为 1,相同为 0
a ^ b 计算它们的二进制表示时不同时为 1 的位之和
*/
int sum = a ^ b;
/*
&:与运算,运算规则为
a & b:把 a 和 b 中同为 1 的两位相加,那么既然两位同为 1,也就代表在 2 进制中要发生进位,
处理进位时可以将结果左移一位即可,右边刚好补 0
*/
int carry = (a & b) << 1;
//递归计算 sum 与 carry 的和,直到 carry 为 0 时退出递归求和
return getSum(sum, carry);
}
}
//思路2————位运算_非递归
class Solution {
public int getSum(int a, int b) {
while (b != 0) {
int carry = (a & b) << 1;
a = a ^ b;
b = carry;
}
return a;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43004044/article/details/125308807
内容来源于网络,如有侵权,请联系作者删除!