不用加减乘除做加法

题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:既然不能用四则运算符号,那么只能考虑用位运算符啦。考虑,如5+7=12,5为101,7为111,两者先做不加进位的运算,101+111=010,进位为1010(这一部分可以看成是101&111=101,然后将101左移一位变为1010),类似地,仍将进位的结果1010和不加进位的加法010,继续上一步,010-》5,1010-》7,不加进位加为1000,进位为100,同理,继续相加,1000-》5,100-》7,不加进位加为1100,进位为0000,至此,进位为0,算法结束。
 public int Add(int num1,int num2) {
        if(num1 == 0 && num2==0) return 0;
        if(num1 !=0 &&num2==0) return num1;
        if(num1==0&&num2!=0) return num2;
        int sum=0;
        int carray=0;
        do{
          sum = num1^num2;
          carray = (num1&num2)<<1;
          num1 = sum;
          num2 = carray;
        }while(num2!=0);
         return sum;
    }

 

posted @ 2016-09-02 09:48  樱圃  阅读(120)  评论(0编辑  收藏  举报