Leetcode371. 两整数之和
题目:
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
题解:
二进制的加法的几种情况,
1+1 = 0 (有进位)
1+0 = 1 (无进位)
0+0 = 0 (无进位)
0+1 = 1 (无进位)
- 如果不考虑二进制进位的操作,这属于异或操作;
- 如果考虑进位操作,二进制加法中只有1+1会产生进位,这就相当于是与操作;
- 当左移位为0时,停止循环。
java代码:
public static int getSum(int a, int b) {
while (b != 0) {
int tmp = a ^ b;
b = (a & b) << 1;
a = tmp;
}
return a;
}
}
scala代码:
/**
* 位运算
*
* @param a
* @param b
* @return
*/
def getSum(a: Int, b: Int): Int = {
var a1 = a
var b1 = b
while (b1 != 0) {
val temp = a1 ^ b1
b1 = (a1 & b1) << 1
a1=temp
}
a1
}
LeetCode 371两整数之和解析
本文详细解析了LeetCode第371题“两整数之和”的解决方案,通过位运算避免使用加减运算符,实现两个整数的相加。文章提供了Java和Scala两种语言的实现代码。

被折叠的 条评论
为什么被折叠?



