二進制補碼加減運算的溢出檢查

前言

此文章不涉及相應的二進制補碼的加減運算,僅對其溢出的問題進行討論。
例題中有包含相應的解釋,如果通過這三個方法檢測都沒有問題時,結果不溢出。
有任何的錯誤可在評論區指出。

注:在補碼中以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,不能進位。
一個可以進位,一個不能進位,所以結果溢出。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章