不用算術運算符實現兩個數的加法(按位異或)


  對於二進制的加法運算,若不考慮進位,則1+1=0,1+0=1,0+1=1,0+0=0,通過對比異或,不難發現,此方法與異或運算類似。因而排出進位,加法可用異或來實現。然后考慮進位,0+0進位為0,1+0進位為1,0+1進位為0,1+1進位為1,該操作與位運算的&操作相似。

  那么加法運算可以這樣實現:

  1)先不考慮進位,按位計算各位累加(用異或實現),得到值a;

  2)然后在考慮進位,並將進位的值左移,得值b,若b為0,則a就是加法運算的結果,若b不為0,則a+b即得結果(遞歸調用該函數)。

  算法代碼如下(非vs平台):

1 int bitAdd(int a,int b)
2 {
3     if(b==0)
4         return a;
5     int sum = a^b;
6     int carry =(a&b)<<1;
7     return bitAdd(sum,carry);
8 }

技巧題:實現1+2+3+4+……+n的值。

假設n=100;在vs平台下的代碼為:

 1 #include <stdio.h>
 2 #include<stdlib.h>
 3 int bitAdd(int a,int b)
 4 {
 5     int sum=0,carry=0;
 6     if(b==0)
 7         return a;
 8     sum = a^b;
 9     carry =(a&b)<<1;
10     return bitAdd(sum,carry);
11 }
12 
13 int main()
14 {
15     int i,sum=0 ,n = 100;
16     for (i = 1;i<=n ;i++ )
17     {
18         sum = bitAdd(sum,i);
19     }
20     printf("1+2+3+…+%d = %d\n",n,sum);
21     system("pause");
22     return 0;
23 }

運行結果為:

程序運行正確。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM