位運算實現兩個數相加

       最近在網上做題,要求不用四則運算(+、-、*、/)實現兩個數相加。我們首先想到的就是用位運算來實現,覺得挺有意思,也是對計算機底層運算原理的一個理解,故對其做了一個記錄和原理分析。

函數實現如下圖所示:

int add(int num1, int num2)
{
    int tmp1 = num1^num2;
    int tmp2 = (num1&num2)<<1;
    while(tmp2)
    {
        num1 = tmp1^tmp2;
        num2 = (tmp1&tmp2)<<1;
        tmp1= num1;
        tmp2= num2;
     }
     return tmp1;
}

原理分析:

以63加1爲例,如下程序打印了位運算的過程(tmp1 和  tmp2 的二進制值):


其實原理很簡單:

tmp1用來存放兩個數相加(不進位)的結果,tmp2用來存放兩個數相加的進位。那麼number1加number2即可等效爲tmp1加tmp2,由於tmp2是通過或運算再移位得來的,最終一定爲爲零,那麼tmp1就是我們求的兩數相加結果。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章