C語言中兩個整數的按位遞迴加法


在這個問題中,我們得到了兩個數字。我們的任務是建立一個 C 程式,用於兩個整數的按位遞迴加法。

使用按位運算查詢和的邏輯類似於我們在學前班時所做的。為了找到和,我們習慣於將數字的每一位相加,如果存在進位,則將其加到下一位。

我們將做類似的事情,使用異或運算子找到和,並使用與運算子檢查進位。如果存在進位,我們將將其加回到數字中,否則不加。

這是您可能在數位電子學中學習過的**半加器**的邏輯。 請參考此處…

現在,和使用 a^b(即 a 異或 b)計算,我們需要檢查是否需要傳播額外的進位,如果兩個數字的第一位都為 1,或者類似情況。我們需要在數字中新增一個額外的設定位。

因此,位演算法將是

步驟 1 - 查詢 a 和 b 的異或,即 a^b,並將其儲存在結果變數中。

步驟 2 - 檢查 {(a & b) << 1} == 0

步驟 2.1 - 如果它等於 0,則列印結果,它是最終結果。

步驟 2.2 - 如果它不等於 0,則轉到步驟 1,其中 a = {(a & b) << 1} 且 b = 結果。

示例

程式說明演算法的工作原理 -

 線上演示

#include <stdio.h>
int addNumbers(int a, int b) {
   int carry = (a & b) << 1;
   int result = a^b;
   if (carry == 0)
      return result;
   else
      addNumbers(carry, result);
}
int main(){
   int a = 54, b = 897;
   printf("The sum of %d and %d using bitwise adding is %d", a, b, addNumbers(a, b));
   return 0;
}

輸出

The sum of 54 and 897 using bitwise adding is 951’

更新於: 2020年8月5日

3K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.