定點數的加減法

2021-09-27 13:55:21 字數 3526 閱讀 3753

數值運算的核心是指加、減、乘、除四則算術。由於計算機中的數有定點和浮點兩種表示形式,因此相應有定點數的運算和浮點數的運算。本文將介紹計算機中定點數的加減法運算過程。

注意,理解本文的前提是要清楚知道頂點數的原始碼、反碼和補碼的含義,以及定點數在計算機中的表示形式。

1.補碼加法

由於計算機中定點數均以補碼的方式表示和儲存(個人觀點,有待證明),採用補碼表示法進行加減運算比原始碼方便多了,因為不論是正還是負,機器總是做加法,減法運算可變成加法運算。

這裡再次說明定點定點數(定點整數和定點小數)的原始碼、反碼和補碼的表示規則: 

正數的符號位為0,反碼和補碼等同於原始碼。 

負數符號位都固定為1,原始碼,反碼和補碼的表示都不相同,由原碼表示法變成反碼和補碼有如下規則: 

(1)原始碼符號位為1不變,整數的每一位二進位制數字求反得反碼; 

(2)反碼符號位為1不變,反碼數值位最低位加1得補碼。

1.1補碼加法公式

補碼加法公式是: 

[x]補+[y]補=[x+y]補(mod2n)

[x]補+[y]補=[x+y]補(mod2n)

這裡說一下上面公式的意思。mod2nmod2n表示的是模運算,2n2n為模,這個模表示被丟掉的值。上面的式子在數學上成為為同余式,即等式兩邊的值取2n2n的餘數是相等的。

以鐘錶為例,說明模運算。乙個鐘錶有12個小時刻度,時間確實0-24小時。假設現在的標準時間是4點整,而有乙個表已經7點了,為了校準時間,可以採用兩種方法:一是將時針退7-4=3格;二是將時針向前撥12-3=9格。這兩種方法都能對準到4點。由此可見,7-3和7+9是等價的。等價的條件就是以模為12的模運算的情況下等價,即除以12取餘。以數學公式表示如下: 

7−3=7+9(mod12)

7−3=7+9(mod12)

1.2補碼加法公式證明

可分五種情況來證明。假設採用定點整數表示。不包括溢位情況,該情況會另行討論。

(1)x>0, y>0, 則x+y>0 

由補碼定義,[x]補=x,[y]補=y[x]補=x,[y]補=y, 所以[x]補+[y]補=x+y=[x+y]補[x]補+[y]補=x+y=[x+y]補

(2)x<0, y<0, 則(x+y)<0 

[x]補+[y]補=2n+x+2n+y=2n+(2n+x+y)=[x+y]補

[x]補+[y]補=2n+x+2n+y=2n+(2n+x+y)=[x+y]補

(3)x>0, y<0, 則(x+y)<0或(x+y)>0 

相加的兩數乙個為正,乙個為負,因此相加結果有正、負兩種可能。根據補碼定義:[x]補=x,[y]補=2n+y[x]補=x,[y]補=2n+y,那麼 

[x]補+[y]補=x+2n+y=2n+(x+y)=[x+y]補

[x]補+[y]補=x+2n+y=2n+(x+y)=[x+y]補

(4)x<0, y>0, 則(x+y)<0或(x+y)>0 

這種情況和第三種情況一樣,將x和y對調即可,不再贅述。

(5)當x=0或者y=0,或者x=y=0時 

滿足[x]補+[y]補=[x+y]補(mod2n)[x]補+[y]補=[x+y]補(mod2n)。

因此在模2n2n的意義下,任意兩數的補碼之和等於該兩數之和的補碼。這是補碼加法的理論基礎。

2.補碼減法

負數的加法要利用補碼化為加法來做,減法運算當然也要設法化為加法來做。其所以使用這種方法而不適用直接減法,是因為它可以和常規的加法運算使用同一加法器電路,從而簡化了計算機的設計。

定點數用補碼表示時,減法運算的公式為: 

[x]補−[y]補=[x]補+[−y]補

[x]補−[y]補=[x]補+[−y]補

為了證明這個公式,只要證明[−y]補=−[y]補[−y]補=−[y]補,上式即得證。

證明如下: 

因為[x]補+[y]補=[x+y]補[x]補+[y]補=[x+y]補,所以 

①[y]補=[x+y]補–[x]補[y]補=[x+y]補–[x]補

又[x–y]補=[x+(–y)]補=[x]補+[–y]補[x–y]補=[x+(–y)]補=[x]補+[–y]補,所以 

②[–y]補=[x–y]補–[x]補[–y]補=[x–y]補–[x]補

①+②得[–y]補+[y]補=[x–y]補–[x]補+[x+y]補–[x]補=[x–y]補+[x+y]補–[x]補–[x]補=[x–y+x+y]補–[x]補–[x]補=[2x]補–2[x]補=0[–y]補+[y]補=[x–y]補–[x]補+[x+y]補–[x]補=[x–y]補+[x+y]補–[x]補–[x]補=[x–y+x+y]補–[x]補–[x]補=[2x]補–2[x]補=0

從而有 [–y]補=–[y]補(mod2n)[–y]補=–[y]補(mod2n)

因此,只要求得[–y]補[–y]補,就可以變減法為加法,已知[y]補[y]補,求[–y]補[–y]補的法則是:

對[y]補[y]補各位(包括符號位)取反,然後在末位加上1,就可以得到[–y]補[–y]補。

示例: 

[x]補=00110110,[y]補=11001101[x]補=00110110,[y]補=11001101,求[x]補+[y]補,[x]補−[y]補[x]補+[y]補,[x]補−[y]補 ,其中x=54,y=-51。 

3.溢位概念與檢測方法

3.1溢位的概念

在定點整數機器中,數的表示範圍|x|<(2n−1)|x|<(2n−1)。在運算過程中如出現大於字長絕對值的現象,稱為「溢位」。在定點機器中,正常情況下溢位是不允許的。

例:設定點整數字長8位,補碼表示(最高位為符號位),表示範圍為-128~127,運算結果超出此範圍就發生溢位。

兩個負數相加的結果小於機器所能表示的最小負數,結果變為負數,成為負溢。

兩個正數相加,結果大於機器字長所能表示的最大正數,結果成為變為負數,稱為正溢。

下面以具體的例子來演示正常的運算和溢位時的運算。 

3.2溢位的檢測方法

為了判斷溢位是否發生可採用以下兩種檢測方法。

(1)單符號法 

當兩個運算元同號時,而其和的符號與運算元的符號不一致則就發出溢位,公式表示如下: 

溢位=a¯¯¯¯nb¯¯¯¯nsn+anbns¯¯¯n

溢位=a¯nb¯nsn+anbns¯n

注意: 

a、若是同號相減或異號相加,則運算結果不可能溢位; 

b、若是同號相加或異號相減,則運算結果可能溢位。

(2)採用最高有效位的進製判斷 

溢位=c¯¯¯¯ncn−1+cnc¯¯¯¯n−1=c¯¯¯¯n⨁c¯¯¯¯n−1

溢位=c¯ncn−1+cnc¯n−1=c¯n⨁c¯n−1

符號位產生的進製與最高有效位產生的進製情況不同,則溢位。

(3)採用變形補碼判斷(雙符號位) 

用sn+1、snsn+1、sn分別表示結果最高符號位和第2個符號位。 

溢位=sn+1⨁sn

溢位=sn+1⨁sn

01:結果正溢; 

10:結果負溢;

定點整數的加減運算完成之後,會由硬體邏輯電路進行溢位檢測,如果發現存在溢位,則產生硬體中斷 。

4.定點小數的加減運算法則

定點小數是定點數的一種,其運算法則和步驟與定點整數一致,不再贅述。下面舉個僅以雙符號位補碼來表示定點小數的補碼加減運算示例。

定點數加減法及其溢位判斷原理

設x為乙個數的真值,m 2 n n為機器位數 則在數學表示上 x 補 m x mod m 2 le x 2 x 補 y 補 m x m y mod m m x y mod m x y 補 可見,補碼加法直接使用加法器相加即可 x 補 y 補 m x m y x y mod m m x m y mod...

定點運算 加減法運算

補碼加減運算公式 即 a b a 補碼 b 補碼 補碼,所以求和運算全部用補碼的加法,結果是結果的補碼 溢位判斷 一位符號位判斷溢位 定義 參加操作的兩個數符號相同,其結果的符號與原運算元的符號不同,硬體實現 最高有效位的進製 異或 符號位的進製 1 情況分類 符號位數值位最高位 溢位判定結果 正數...

定點補碼加減法運算 定點加減法運算與溢位判斷處理

定點加減法運算 原碼加減法 同號 數值部分相加,結果的符號與加數符號相同。異號 數值部分相減 要將減數取補,變成加法 結果的符號取絕對值大的數的符號。原碼一般不用來做加減運算,而多用來做乘除運算,做加減運算時,多用補碼。補碼加減法運算 符號位與數值位一起參與運算。運算規則 兩個補碼相加,符號位也參與...