在計算機系統中編碼以二進制形式存在,而且受到機器字長的限制,在編碼運算過程中可能會出現運算結果超出機器數表示范圍的情況,稱為“溢出”。溢出的計算結果是不可靠的。“溢出”指運算結果超出機器數表示范圍。
一.無符號數編碼運算中的溢出判斷:
加法運算,如果運算結果超位了,則為溢出;減法運算,如果是小的減大的,則必溢出。
二.帶符號數編碼運算中的溢出判斷:
原碼和補碼的減法運算都是先將a-b轉換為a+(-b),然后加法運算。因此下面我們只說加法運算。
- 原碼的運算:正正相加或者負負相加只看有沒有超位,超了則溢出。正負相加不會溢出。
- 補碼的運算:這是本文核心,因為計算機系統中采用的都是補碼的編碼形式,說的通俗點,存在計算機系統上的數都是補碼形式。對於補碼加法運算結果的溢出判斷,正正相加或者負負相加,如果運算結果的符號位發生變化則發生溢出。
8位補碼運算的例子:
01111010 + 00101000 = 10100010,發生溢出,結果不可靠。
11111010 + 10100001 = 10011011,發生溢出,結果不可靠。
——————————————————————————————
補充一下,原碼補碼(圖片來自網絡,侵刪)
——————————————————————————————
三. 浮點運算中的溢出判斷:
以32位浮點為例,在計算機中浮點數是這樣存在的————一個32位浮點數總共占用4個字節的空間(8位為一個字節),也就是32個比特。第31位為符號位(s),第30~23位為指數域(E),第22~0位為尾數域(F)。一般浮點數表示為這樣的形式: (-1)s x F x 2E 。(補充:在64位浮點中指數域占11位,尾數域占52位)