【发布时间】:2014-03-04 22:41:34
【问题描述】:
我正在尝试检测十六进制算术是否会导致溢出。
仅使用 8 位二进制补码符号运算。
0xFF + 0x1
但首先,我无法确定十六进制数字是负数还是正数。
【问题讨论】:
标签: hex
我正在尝试检测十六进制算术是否会导致溢出。
仅使用 8 位二进制补码符号运算。
0xFF + 0x1
但首先,我无法确定十六进制数字是负数还是正数。
【问题讨论】:
标签: hex
在 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)
关于符号,最左边的位是符号位。 “0” 为正 "1" 是负数。
示例:
+------- 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,则为负数。
【讨论】: