2014-03-04 79 views
1

我想檢測十六進制算術是否會導致溢出。十六進制加法溢出檢測

僅使用8位二進制補碼簽名操作。

0xFF的+爲0x1

但首先,我無法確定數是十六進制的負的或正的。

回答

3

在2的補碼中,當結果是錯誤的符號時發生溢出。

實施例:

兩個陽性得到否定結果:

01111111 (+127) 
+ 00000001 (+ 1) 
------------------- 
    10000000 (-128) <-- overflow (wrong sign) 

兩個底片得到的陽性結果:

11111111 ( -1) 
+ 10000000 (-128)  
------------------- 
    01111111 (+127) <-- overflow (wrong sign) 

注意:不能發生溢出如果添加相反sig的數字納秒。

01111111 (+127) 
+ 10000000 (-128)  
------------------- 
    11111111 ( -1) 

關於符號,最左邊的位爲符號位。 「0」是正數 和「1」是負數。

實施例:

 +------- sign bit 
     | 
     v 
0xFF = 11111111 = -1 
0x80 = 10000000 = -128 
0x01 = 00000001 = +1 
0x7F = 01111111 = +127 

如果最左邊的十六進制位爲0123456,或7, 那麼它是正的。如果最左邊的十六進制位爲89ABCDE,或F,那麼它是消極的。