加算減算を使用しないで2つの加算を実現

1876 ワード

加減乗除を用いずにシフトが考えられる.
演算とは2つの数を加算したキャリー状況を反映することができる.異或は2つの数の加算がキャリーを考慮しない結果を反映している.
2つの数の加算結果は、進位の数に進位しない数を加える.
このようにして、再帰関係が出てきます.
いつ停止しますか?進位がなくなった場合、異或の結果を直接返すことができます.
 1 int bitadd(int a, int b)

 2 {

 3     int u, c;

 4     u = a & b; //  

 5     c = a ^ b;

 6 

 7     if (u != 0)

 8     {

 9         return bitadd(u<<1, c);

10     }

11     else

12     {

13         return c;

14     }

15 }