我正在尝试检测十六进制算术是否导致溢出。
仅使用8位二进制补码操作。
0xFF + 0x1
但首先,我无法确定十六进制中的数字是负数还是正数。
答案 0 :(得分:5)
在2的补码中,当结果是错误的符号时会发生溢出。
<强> 实施例 强>
两个阳性结果产生负面结果:
01111111 (+127)
+ 00000001 (+ 1)
-------------------
10000000 (-128) <-- overflow (wrong sign)
两个否定结果产生了积极的结果:
11111111 ( -1)
+ 10000000 (-128)
-------------------
01111111 (+127) <-- overflow (wrong sign)
注意:如果添加符号相反的数字,则不会发生溢出。
01111111 (+127)
+ 10000000 (-128)
-------------------
11111111 ( -1)
关于标志, 最左边的位 是符号位。 &#34; 0&#34; 是积极的 &#34; 1&#34; 是否定的。
示例:
+------- sign bit
|
v
0xFF = 11111111 = -1
0x80 = 10000000 = -128
0x01 = 00000001 = +1
0x7F = 01111111 = +127
如果最左边的十六进制数字是0
,1
,2
,3
,4
,5
,6
或7
,
那是积极的。如果最左边的十六进制数字是8
,9
,A
,B
,
C
,D
,E
或F
,则为负数。