今日心情:重新启程!
题目描述:
给你两个整数
a
和b
,不使用 运算符+
和-
,计算并返回两整数之和。
解题代码:
class Solution {
// 位操作实现两数相加
public int getSum(int a, int b) {
while(b != 0){
int carry = (a & b) << 1;
a ^= b;
b = carry;
}
return a;
}
}
解题思路:
虽然想到了通过位运算 的 异或 和 与 实现进位加,但是还是没有实现出来。题解的方法真的挺巧妙的。虽然代码很简单,但是实现的真的挺👍。
代码思路:( 以a = 2, b = 3 为例 )
(1)carray 为 a,b的进位, 通过 (a & b) << 1 实现
(2)计算无进位相加的结果,然后赋值给a: a ^= b
(3)将 进位carray 位赋值给b,然后while 判断 是否存在进位,如果存在则继续位操作,否则直接返回无进位相加的结果。