国际惯例,先上代码:
public int Add(int num1,int num2){
int tmp = num1;
num1 = tmp^num2;
num2 = tmp&num2;
return num2 == 0?num1:Add(num1,num2 << 1);
}
分析: 1.两数字a、b相加,其实是二进制的相加 2.两个数字异或运算,结果为c, 3.两个数字与运算,若等于0,则表示没有进位,返回c即可 否则,存在进位,结果为d 4.将d左移1位,与c进行相加,重复1-4即可。
举例:3(011)和5(101)
3^5=011^101=110
3&5=011^101=001
因为001不等于0,表示有进位,左移1位,为010
将110和010相加
110^010=100
110&010=010
因为010不等于0,表示有进位,左移1位,为100
将100和100相加
100^100=000
100&100=100
因为100不等于0,表示有进位,左移1位,为1000
将1000和000相加
1000^0000=1000
1000&0000=0000
0000等于0,没有进位,返回1000(8)即可
结论:3+5=8
注:减法类似