本節書摘來自華章出版社《計算機組成原理》一書中的第2章,第2.3節, 作 者 computer organization and architecture: themes and variations[英]艾倫·克萊門茨(alan clements) 著,沈 立 王蘇峰 肖曉強 譯, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
本節将介紹基本的二進制整數算術運算(加法、減法、乘法和除法)。二進制算術運算的規則與十進制基本相同;唯一的差別在于,十進制算術運算以10為基數,每位有10個數字,而二進制運算以2為基數,每位隻有2個數字。下面列出了二進制加法、減法和乘法運算的規則,比起對應的十進制運算簡單了許多。三個一位二進制數加法的規則也列在了下面,這有助于讀者了解進位是如何處理的。

上面的規則描述了兩個一位二進制數進行加法、減法和乘法運算時的情形。兩個位相加可能産生進位或借位,就像十進制算術運算中那樣(例如4+8=2,進位為1)。
真實計算機處理8位、16位、32位或64位的數字,一個字中的所有位都必須參與算術運算。當兩個二進制字相加時,一個加數中所有的位都将與另一個加數中對應的位相加,從最低位開始,每次處理一位。加法産生的進位應參與其左邊一列中兩位的加法。請考慮下面4個8位二進制數相加的例子。請注意,圖中加陰影的表示進位(值為1)。
當兩個二進制數相減時,一定要記得0–1的差為1,同時會從其左側借一位。請考慮下面二進制減法的例子(加陰影的表示借位)。請注意例5是用小數減去大數,就像傳統的算術運算一樣。但我們很快就會看到,計算機并沒有按照這種方式工作。
十進制乘法則要難一些——我們必須從1×1=1開始學習九九表,直到9×9=81。二進制乘法僅需要一個簡單乘法表,記錄了兩個位相乘得到一個位的積。
0×0=0
0×1=0
1×0=0
1×1=1
下面的例子描述了011010012(乘數)與010010012(被乘數)相乘的過程。兩個n位字相乘将産生一個2n位的積。乘法運算從被乘數的最低位開始,測試它的值是0還是1。如果該位為0,則在算式中寫下n個0;如果該位為1,則寫下乘數(這個值被稱作部分積)。接下來繼續測試被乘數左邊的下一位并執行同樣的操作——這個例子是從上一個部分積的下方、左邊一位開始寫下n個0或n位的乘數(即部分積被左移了1位)。這個過程将一直繼續,直到被乘數中的每一位都按順序被檢測過。最後,這n個部分積被加到一起,生成乘數與被乘數的積。
計算機不會像我們這樣完成乘法運算。本章将在後面介紹計算機實作乘法的一些方法。