码迷,mamicode.com
首页 > 其他好文 > 详细

47不用加减乘除做加法

时间:2018-01-12 13:28:57      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:符号   nbsp   运算符   des   scribe   不用   运算   turn   style   

题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
 
思路:感觉还是对位运算不太熟悉。
^异或是不进位加法,相同的为0,不同的为1;
&与运算是都为1就为1,有一个是0就全为0;
|或运算只要有一个是1就是1.
例子:5 + 7;
这题首先1)计算不进位的加法,5 + 7 = 02;
    2)计算进位。5 +7 = 10;
    3)将1和2相加,10 + 2 = 12;
第一步就是异或操作,第二步首先使用&操作得到都为1的那些位,然后一定记得左移一位才是得到进位,因为10 & 10 = 10,但是应该要进位,所以<<1。
还有就是为什么需要一个循环,因为第一步和第二步相加,也可能进位,所以循环的终止条件是进位为0的时候才终止。
class Solution {
public:
    int Add(int num1, int num2){
        int p1 = 0,p2 = 0;
        
        while(num2 != 0){
            p1 = num1 ^ num2;
            p2 = (num1 & num2) << 1;            
           
            num1 = p1;
            num2 = p2;
        }        
        return num1;
    }
};

 

 
 

47不用加减乘除做加法

标签:符号   nbsp   运算符   des   scribe   不用   运算   turn   style   

原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8274987.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!