转自:http://sllovewsy149.blog.163.com/blog/static/108734178201245114626125/
参考: http://blog.csdn.net/morewindows/article/details/8710737
Q:写一个算法,将两个数相加,但是不使用加法(+)和其他的算术运算
A:首先考虑下我们是如何对两个十进制数做加法的.
759+674,不考虑进位,得到323.
只考虑进位的话,得到1110.
所以得到759+674=323+1110=1433
计算机对二进制数怎么做呢?
不考虑进位的话,使用异或(^)
只考虑进位的话,使用与(&),同时左移(<<)一位.
考虑使用递归,直到进位为0,这样就得到了两个数之和.
下面是Java代码:
1: public int addNoArithm(int a, int b) {
2: if (b == 0) {
3: return a;
4: }
5: int sum = a ^ b;
6: int carry = (a & b) << 1;
7: return addNoArithm(sum, carry);
8: }