不用加减乘除做加法

Posted on 2016-10-02 14:50  alavender  阅读(145)  评论(0编辑  收藏  举报

题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

分析:对数字做运算,最常用的就是四则运算和位运算了,这里要求不能使用四则运算,那么我们可以考虑位运算,可以用位运算来进行加法运算。首先,举两个例子:

例1.

12+13(1100+1101)

1100 ^ 1101 = 0001(对应位相加,不考虑进位)

1100 & 1101 = 1100(1代表产生进位的地方)

11000 ^ 00001 = 11001 = 25(进位左移一位,与不考虑进位时的结果相加,不考虑进位)

11000 & 0001 = 0(无进位,则上一步异或的结果为左后的结果)

例2.

15+6(1111+0110)

1111 ^ 0110 = 1001

1111 & 0110 = 0110

01100 ^ 1001 = 00101

01100 & 1001 =01000

010000 ^ 00101 = 10101 = 21(结果)

010000 & 00101 = 0(结束)

实现

 

 1 public class Num48_Add {
 2     public int Add(int num1,int num2) {
 3         int and = num1 & num2;
 4         int xor = num1 ^ num2;
 5          
 6         while(and!=0){
 7             int temp = xor;            
 8             xor = (and<<1) ^ xor;
 9             and = (and<<1) & temp;            
10        }
11     return xor;
12     } 
13 }