考慮,作爲一個例子,5+7
:
5 = 101 (Base 2)
7 = 111 (Base 2)
現在考慮添加兩個(基數爲2)數字:的A+B
0+0 = 0 = 0 carry 0
1+0 = 1 = 1 carry 0
0+1 = 1 = 1 carry 0
1+1 = 10 = 0 carry 1
總和(不攜帶)是A^B
和進位是A&B
;並且當您攜帶一個號碼時,它會向左移一位數(因此(A&B)<<1
)。
所以:
5 = 101 (Base 2)
7 = 111 (Base 2)
5^7 = 010 (sum without carrying)
5&7 = 101 (the carry shifted left)
然後,我們可以改乘添加進:
A' = 1000
B' = 100 (without the leading zeros)
A'^B' = 1100 (sum without carrying)
A'&B' = 0000 (the carry shifted left)
現在:
A = 010
B = 1010
A^B = 1000 (sum without carrying)
A&B = 0010 (the carry shifted left)
然後,我們可以,因爲我們還有更多攜帶再次遞歸沒有東西可以攜帶 - 所以我們可以停下來,答案是1100 (base 2) = 12 (base 10)
。
該算法正在實施十進制加法作爲(longhand)二進制加法使用or
s來添加和bitshifted and
s來找到進位並將遞歸,直到沒有什麼更多要進行(這將始終發生的位移每次對進位附加零,所以每次遞歸至少再有一位不會產生進位值)。
來源
2015-04-19 00:33:43
MT0