計算機算術
二進位加法
二進位加法就是小學的直式加法,只是符號從十個變成兩個。你把兩個數字按位值對齊,從右邊一欄一欄相加,只要某欄的總和大到一個位數放不下,就往左邊那欄進一個 1。十進位裡到了十就進位;二進位裡到了二就進位,因為兩個 1 在二進位剛好是一個十(寫成 0b10)。這條唯一的規則套用到所有欄位,就是硬體裡整數加法的全部。
對每個位元位置,硬體要把三樣東西相加:第一個數字的位元、第二個數字的位元,以及從右邊那欄進來的進位。這三個一位元輸入產生一個和位元(留在這一欄)與一個進位輸出位元(往左流到下一欄)。為一欄做這件事的電路叫全加器;把 n 個串起來、讓每個的進位輸出餵給下一個的進位輸入,就成了 n 位元加法器,也就是 ALU 仰賴的主力。舉例:0b0110(6)加 0b0011(3)。最右欄 0+1 = 1,無進位。下一欄 1+1 = 0 進位 1。再下一欄 1+0+進位 1 = 0 進位 1。再下一欄 0+0+進位 1 = 1。結果 0b1001 = 9。
美妙之處在於:同一個加法器也能處理有號數,完全不必改動,這要歸功於二補數表示法。硬體從不過問某個位元樣式是正數還是負數;它只把位元樣式相加,讓選定的格式自然把答案算對。這正是為什麼二補數是通用的整數格式,也是為什麼減法能由加法搭建而不需要自己的電路。
把 0b0110(6)與 0b0011(3)從右往左逐欄相加:0+1=1;1+1=0 進位 1;1+0+1=0 進位 1;0+0+1=1。位元由上而下讀出 0b1001 = 9。
某欄到了二就進一個 1,就像十進位裡到十進位一樣。
如果進位從最高欄跑出去,代表結果放不進指定的位元寬度——那是溢位/進位狀況,而不是算錯。保留下來的位元仍是真正總和的正確低位。
又稱
另見