a^b,即a+b,但是没有进位,原因:
- 0^1 = 1,0+1=1
- 1^0 = 1,1+0=1
- 1^1 = 0,1+1=10
- 0^0 = 0,0+0=0
a&b,得到的二进制数的每一位就是a+b需要进位的位,原因:
- 0&1 = 0,0+1=1
- 1&0 = 0,1+0=1
- 1&1 = 1,1+1=10
- 0&0 = 0,0+0=0
a<<1,将a的每一位都进位
那么思路来了:①先a^b得到没有进位的加法,②将需要进位的进位,③把前两个加起来;即:(a^b) + (a&b)<<1,当然啦,这里不能用“+”,不过我们可以用递归
package com.vapy.offer;
/**
*
* @author vapy 2016年8月29日
*
*/
public class Add {
public static void main(String[] args) {
System.out.println(add(23,-245));
}
public static int add(int num1, int num2) {
if(0 == num2) {
return num1;
}
//<<的优先级比&高,切记不能少括号
return add(num1^num2, (num1&num2)<<1);
}
}
结果:-222
本文代码可在github查看:点击此处