溢出,本是通用的名詞。可以理解為:容器太小。
但是,計算機專業中,超過容器範圍的事情,就分成了“進位”和“溢出”兩種說法。
人類所用的:自然數、整數。
在計算機專業人嘴裏,就改稱為:無符號數、帶符號數。
不論什麽數,在計算機中,都是用“二進制機器碼”表示和存儲。
8 位的二進制機器碼,
可代表無符號數的範圍是:0~255。
可代表帶符號數的範圍是:-128~+127。
當運算結果,超出了上述的範圍,必然就會溢出。
Intel 設計 CPU 時,規定了兩個標誌位。
無符號數運算結果超出上下限,將有:CF = 1,這就叫“進位”。
有符號數運算結果超出上下限,將有:OF = 1,這才叫做“溢出”。
--------------------
計算:1111 1110 + 1111 1101 = (進位 1) 1111 1011。
如果這是無符號數,就是:254 + 253 = (256)? 251。
結果應該是 507,超出了 255,進位=1。
如果這是帶符號數,就是:(-2) + (-3) = (舍棄進位) (-5)。
結果不超範圍,沒有溢出,結果正確。
--------------------
計算:0111 1110 + 0111 1101 = (0) 1111 1011。
如果這是無符號數,就是:126 + 125 = (0)? 251。
結果不超出 255,結果正確。進位=0。
如果這是帶符號數,就是:+ 126 + 125 = (舍棄進位) (-5)。
結果超範圍,溢出了,結果符號不對,結果錯。
--------------------