定點數的位移方式和溢出判斷


定點數:

參考鏈接:

  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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM