算法實戰(二)--求加法

書接上回,這回的題目是求加法
說白了就是讓你自己去實現加法,因爲不予許用+,-號啊親;
這道題考點在於你對位運算的掌握,實際上二進制的加減乘除都是位運算,我想大家都會想到用位運算實現,但這題有個誤區就是—不要想的太複雜;

位運算符號最基礎的幾個符號:&(與),|(或),~(非),^(異或),>>\<<(左右位移);

然後我們說一下“+”怎麼用位運算實現:
首先,我們考慮最原始的問題1 + 1(二進制的情況):
例子:
0 + 0 0 + 1 1 + 1

00 00 01
00 01 01
——————
00 01 10

我們很清楚的得出這個結論(在 1 + 1的情況):

a^b ; //第一位的結果
(a&b)<<1; //第二位的結果
a+b == a^b + (a&b)<<1;

這個結論我們驗證過後發現沒毛病,但是題目要求是不能用“+”啊!
很簡單:

a + b = a^b + (a&b)<<1;
當a&b爲0的時候,就變成了:
a + b = a^b(答案揭曉了)。

那麼代碼也來了:

int sumint a, int b)
{
    int _and = a&b;
    int _xor = a^b;
    int t_a, t_b, _sum;

    if(_and == 0)
    {
        return _xor;
    }
    else
    {
        t_a = _xor;
        t_b = _and<<1;
        _sum = sum(t_a, t_b);
    }

    return _sum;
}

我們已經,實現了求加法,同樣如果求減法的話:

int sub(a,b)
{
    return sum(a, ~b);//舉一反三,親;
}
發佈了30 篇原創文章 · 獲贊 19 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章