前言
此文章不涉及相應的二進制補碼的加減運算,僅對其溢出的問題進行討論。
例題中有包含相應的解釋,如果通過這三個方法檢測都沒有問題時,結果不溢出。
有任何的錯誤可在評論區指出。
注:在補碼中以0開頭爲正數,以1開頭爲負數
法一(較少使用)
對於兩個符號相同的補碼數相加,如果和的符號與加數的符號相反時,結果溢出。
兩個符號相反的補碼數相減,差的符號與減數的符號相同時,結果溢出
如果兩個同爲正,相加後爲負時,結果溢出
如果兩個同爲負,相加後爲正時,結果溢出
法二
兩個補碼數相減,若最高數值位向符號位送的進位值,與符號位送向更高位的進位值不同時,結果溢出。
符號位的進位和最高數值位的進位不同時,結果溢出
注:符號位爲二進制最左邊的一位(雙符號位的情況下爲兩位),最高數值位爲二進制最左邊的第二位(雙符號位的情況下爲第三位)。
法三(常用)
在採用雙符號位運算時,若兩個符號位的值不同,則結果溢出。
即運算結果出現了以01開頭時正溢出,出現了以10開頭時負溢出。
兩個情況都爲溢出。
例題
【例1】兩個單符號位的補碼分別爲01011和01000
法一:
在補碼中開頭爲0表示爲正數,開頭爲1表示負數。
相當於兩個正數相加後變成了負數,與正+正=正的事實不符,所以結果溢出
【例2】兩個單符號位的補碼分別爲10101和11000
法二:
兩個符號位都爲1,可以進位。而最高數值位分別爲0和1,不能進位。
一個可以進位,一個不能進位,所以結果溢出。
【例3】兩個單符號位的補碼分別爲10100和11001
法二:
兩個符號位都爲1,可以進位。而最高數值位分別爲0和1,不能進位。
一個可以進位,一個不能進位,所以結果溢出。
【例4】兩個單符號位的補碼分別爲10111和10101
法二:
兩個符號位都爲1,可以進位。而最高數值位都爲0,不能進位。
一個可以進位,一個不能進位,所以結果溢出。
【例5】兩個雙符號位的補碼分別爲001011和001000
法三:
因爲雙符號位結果中出現了以01或10開頭,所以結果溢出
【例6】兩個雙符號位的補碼分別爲110111和110101
法二:
兩個符號位都爲11,可以進位。而最高數值位都爲0,不能進位。
一個可以進位,一個不能進位,所以結果溢出。