题目链接
题目描述
给定两个int A和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。
测试样例
输入:
1 2
输出:
3
题目解析
本题可以通过位运算实现,具体实现如下:
- 二进制位异或运算相当于对应位相加,不考虑进位
- 二进制位与运算左移一位相当于对应位相加之后的进位
- 两个数相加:对应二进制位相加的结果 + 进位的结果 比如:3 + 2 --> 0011 + 0010 --> 0011^ 0010 + ((0011 & 0010) << 1) —> (0011 ^ 0010) ^ ((0011 & 0010) << 1), 当进位之后的结果为0时,相加结束
代码运行
import java.util.*;
public class UnusualAdd {
public int addAB(int A, int B) {
if(A==0){
return B;
}
int sum = 0;
int num = 0;
while(B!=0){
sum = A^B;
num = (A&B)<<1;
A = sum;
B = num;
}
return A;
}
}