题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
分析:对数字做运算,最常用的就是四则运算和位运算了,这里要求不能使用四则运算,那么我们可以考虑位运算,可以用位运算来进行加法运算。首先,举两个例子:
例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 }