對於二進位制的加法運算,若不考慮進製,則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技巧題:實現1+2+3+4+……+n的值。int bitadd(int a,intb)2
假設n=100;在vs平台下的**為:
1 #include 2 #include3執行結果為:int bitadd(int a,intb)4
1213
intmain()
1420 printf("
1+2+3+…+%d = %d\n
",n,sum);
21 system("
pause");
22return0;
23 }
程式執行正確。
不用算術運算子實現兩個數的加法 按位異或
用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下1 1 01 0 1 0 1 10 0 0很明顯這幾個表示式可以用位運算的 來代替,如下1 1 01 0 1 0 1 10 0 0這樣我們就完成了簡單的一位數加法...
不用算術運算子實現兩個數的加法 按位異或
對於二進位制的加法運算,若不考慮進製,則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 1 0,1 0 1,0 1 1,0 0 0,通過對比異或,不難發現,此方法與異或運算類似。因而排出進製,加法可用異或來實現。然後考慮進製,0 0進製為0,1 0進製為1,0 1進製為0,1 1進製為1,該操作與位運算的 操作相似。那麼加法運算可以這樣實現 ...