定點數:
參考鏈接:
https://blog.csdn.net/limanjihe/article/details/52440544
漫談計算機組成原理(九)定點數及定點數的運算 - 雲+社區 - 騰訊雲 (tencent.com)
定點數的位移運算
移位運算的規則:
雖然正數和負數的移位運算規則不相同,但是相同之處在於移位后正數和負數的符號不變。
那么規則就變成了移位運算時,符號位不動,數值位按照如下規則進行移位。
無符號整數
溢出情況:(有且僅有正溢出)超出最大表達范圍即溢出
例:8位機器數 表達范圍:0-255 如果計算的結果超過了這個范圍,則會出現溢出現象,最高位無法表達,導致和比其中一個加數小。
帶符號整數
溢出情況:
如何判斷有符號數是否發生溢出現象:
1、兩個正數相加得到一個負數,則說明發生了正溢出
2、兩個負數相加得到一個正數,則說明發生了負溢出
正溢出: 兩正數的數值部分相加產生進位到符號位,導致最終的得到的數是負數,導致出現錯誤 例:127 + 1 = 128 機器數表示 :0111,1111 + 0000,0001 = 1000,0000 負溢出: 例:-128 + -1 = -129 機器數表示 1000,0000 + 1111,1111 = 1,0111,1111(第一位舍去無法表示)
溢出判斷方法:(溢出只可能兩個正數相加或者兩個負數相加)
(1)用一位符號位判斷溢出:判斷結果的符號位是否與兩個操作數的符號位相同,如果不同,則發生溢出
(2)利用數據編碼的最高位(符號位)和次高位(數值部分的最高位)的進位狀況來判斷運算結果是否發生了溢出:
- 如果進位情況是00,則無溢出;
- 如果進位情況是為01,則發生溢出;
- 如果進位情況是為10,則發生溢出;
- 如果進位情況是為11,則無溢出
(3)采用雙符號位補碼進行判斷:
正常時兩個符號位的值相同,在運算結果中當兩個符號位不同時則表明發生了溢出。
運算結果的符號位為01表明兩個正數相加,結果大於機器所能表示的最大正數,稱為上溢;
運算結果的符號位為10表明兩個負數相加,結果小於機器所能表示的最小負數,稱為下溢。
也就是說,兩個正數相加,數值位不應向符號位同時產生進位,使得結果數的符號位和操作數的一樣,為00
注意,雙符號位數的加法,符號位也要參與進位運算(這樣才能達到上溢和下溢的效果)
例子: (-10)+(-7)=(-17) 用機器數表示為 11 0110 + 11 1001 = 10 1111 發生溢出 3 + 2 = 5 用機器數表示為00 0011 + 00 0010 = 00 0101
補充:
雙符號位數移位規則: 區別於單符號位數的符號位不動,數值位按規則移動
正數補碼移位:
數符不變,空位補零(右移時第二符號位移至尾數最高位)
例如:00.1101左移一位是01.1010,右移一位是00.0110; 01.1101左移一位是01.1010,右移一位是00.1110;
負數補碼移位:
規則是左移空位補零,右移空位補一。
例如:11.1101左移一位是11.1010,右移一位是11.1110; 10.1101左移一位是11.1010,右移一位是11.0110