首页 > 代码库 > 不用加减乘除做加法

不用加减乘除做加法

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

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

例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 }      

 

不用加减乘除做加法