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

5+17分成三步,5对应的二进制101,17的二进制是10001:

1)各位相加但不计进位,得到的结果10100(最后一位两个数都是1,相加的结果是二进制的10,这一步不计进位,因此结果仍然是0)。

2)记下进位,例子相加产生的进位是二进制10

3)前两步的结果相加,得到的结果是10110,转成二进制正好是22。

代码实现:

public class Solution{
     public static int add(int num1,int num2){
          int sum=0;
          int carry=0;
          do{
               sum=num1^num2;
               carry=(num1&num2)<<1;
               num1=sum;
               num2=carry;
          }while(num2!=0);
          return sum;
     }

     public static void main(String[] args){
         int sum=add(17,5);
         System.out.println(sum);
     }
}

 

 posted on 2018-12-12 21:00  会飞的金鱼  阅读(93)  评论(0)    收藏  举报