不使用四則運算子計算兩個整數的和

來源:互聯網
上載者:User

標籤:style   color   使用   strong   代碼   amp   

這裡筆者唯寫出關鍵代碼:

int add(int n,intm)

{
   if(m==0) returnn;      ①

   int sum=n^m;           ②

   int carry=(n&m)<<1;    ③

   return add(sum,carry); ④
}

在分析每步代碼之前先看兩個例子:
不帶進位的兩數相加:
0000 0010------2
0000 0100------4
結果是:
0000 0110------6
帶進位的兩數相加:
0000 0101------5
0000 0100------4
結果是:
00001001------9
先將這兩個例子代入函數中,通過對比進位操作和不進位操作的不同,來瞭解此函數的執行過程。

定義一個add函數,並聲明所需的兩個整型變數:
①當m,n中有一個為0,則結果返回的是另一個數值。此語句是程式的最終出口。

② n與m做異或運算,如果m與n相加沒有進位,sum就是所求的結果。否則儲存沒有存在進位的數值,繼續執行下面的進位操作。

③ m與n做相與運算,然後左移1位。產生進位時,m與n在某一個相同位置上同時為1,相與之後依然為1,左移1位,便可得到進位元值。二次以上的進位以此類推。如果沒有進位,則carry為0。

④ 遞迴函式return add( ),將上述步驟得到的sum和carry進行再次類似的運算,直至沒有產生進位為止,即carry=0。

註:若分析有誤望大家指出!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.