【剑指offer系列】 不用加减乘除做加法___47

  题目描述:
  写一个函数,求两个整数之和。要求不能使用加减乘除   
  
  分析:
  既然题目要求不能用加减乘除,那么只能用到位操作了。
  0和1 、1和0异或为1, 0和0 、1和1异或为0
  0和0 、0和1 、1和0相与为0, 1和1相与为1
  因此可以用异或做加法,与操作来计算进位  
  以3加5为例,3^5=6,3&5=1,则num=6,carry=1<<1=2;
   6^2=4,6&2=2,则num=4,carry=4;
   4^4=0,4&4=4,则num=0,carry=8;
   0^8=0,0&8=0,num=8,carry=0,退出循环。
  
  代码:    

int sum(int num1,int num2){
    int carry=0;
    int num=0;
    do{
        num=num1^num2;
        carry=(num1&num2)<<1;
        num1=num;
        num2=carry;
    }while(num2); 
    return num1;
}

你可能感兴趣的:(【剑指offer系列】 不用加减乘除做加法___47)