溢位、上溢、下溢

Candy_GL發表於2019-03-22

overflow:溢位
overflow:上溢
underflow:下溢
stack underflow:堆疊下溢;
1. 概念
上溢與下溢

是當一個超長的資料進入到緩衝區時,超出部分被寫入上級緩衝區,上級緩衝區存放的可能是資料、上一條指令的指標,或者是其他程式的輸出內容,這些內容都被覆蓋或者破壞掉。可見一小部分資料或者一套指令的溢位就可能導致一個程式或者作業系統崩潰。

與之對應的就是下溢,下溢是當一個超長的資料進入到緩衝區時,超出部分被寫入下級緩衝區,下級緩衝區存放的是下一條指令的指標,或者是其他程式的輸出內容。

其他解釋

上溢:超出所能表示的最大正數
下溢:超出所能表示的最小負數

如 16 位整數範圍為:-32768(−215 -2^{15}−2 
15
 ) ~ +32767(215−1 2^{15}-12 
15
 −1),則當 32767 再加1時,發生上溢;當 -32768 再減 1 時,發生下溢。

2. 溢位的判斷
兩數相加溢位的判斷:

同號時才可能溢位,同為正,有可能上溢,同為負,有可能下溢;
int add(int a, int b) {
    int c = a + b;
    if ((a^b) & INT_MIN == 0) {
        if ((c^a) & INT_MIN) {
            c = (a<0) ? INT_MIN : INT_MA;
        }
    }
}
--------------------- 
作者:Inside_Zhang 
來源:CSDN 
原文:https://blog.csdn.net/lanchunhui/article/details/52083273 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關文章