Hex加法溢出检测

Flo*_*low 1 hex

我正在尝试检测十六进制算术是否导致溢出.

仅使用8位二进制补码签名操作.

0xFF + 0x1

但首先,我无法确定十六进制中的数字是负数还是正数.

小智 5

在2的补码中,当结果是错误符号时发生溢出.

例:

两个正面结果产生负面结果:

  01111111  (+127)  
+ 00000001  (+  1)  
-------------------
  10000000  (-128) <-- overflow (wrong sign)
Run Code Online (Sandbox Code Playgroud)

两个否定结果产生了积极的结果:

  11111111  (  -1)
+ 10000000  (-128)    
-------------------
  01111111  (+127) <-- overflow (wrong sign)
Run Code Online (Sandbox Code Playgroud)

注意:如果添加符号相反的数字,则不会发生溢出.

  01111111  (+127)   
+ 10000000  (-128)    
-------------------
  11111111  (  -1) 
Run Code Online (Sandbox Code Playgroud)

关于符号,最左边的位是符号位."0"为正,"1"为负.

例:

       +------- sign bit
       |
       v
0xFF = 11111111 =   -1
0x80 = 10000000 = -128
0x01 = 00000001 =   +1
0x7F = 01111111 = +127
Run Code Online (Sandbox Code Playgroud)

如果最左边的十六进制位为0,1,2,3,4,5,6,或7,那么它是积极的.如果最左边的十六进制位为8,9,A,B, C,D,E,或F,那么它是消极的.