對於二進位制的加法運算,若不考慮進製,則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)技巧題:實現1+2+3+4+……+n的值。2
假設n=100;在vs平台下的**為:
1 #include 2 #include3 int bitadd(int a,int b)4 12
迭代方法
int add(int num1, int num2)
while(num2 != 0);
return num1;
}13 int main()
14 20 printf("1+2+3+…+%d = %d\n",n,sum);
21 system("pause");
22 return 0;
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,該操作與位運算的 操作相似。那麼加法運算可以這樣實現 ...