2014-03-04 47 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,那么它是消极的。