有符号二进制整数有正数和负数。在 x86 处理器中,MSB 表示的是符号位:0 表示正数,1 表示负数。下图展示了 8 位的正数和负数:
补码表示
负整数用补码(two`s-complement)表示时,使用的数学原理是:一个整数的补码是其加法逆元。(如果将一个数与其加法逆元相加,结果为 0。)
补码表示法对处理器设计者来说很有用,因为有了它就不需要用两套独立的电路来处理加法和减法。例如,如果表达式为 A-B,则处理器就可以很方便地将其转换为加法表达式:A+(-B)。
将一个二进制整数按位取反(求补)再加 1,就形成了它的补码。以 8 位二进制数 0000 0001 为例,求其补码为 1111 1111,过程如下所示:
初始值 | 00000001 |
第一步:按位取反 | 11111110 |
第二步:将上一步得到的结果加 1 | 11111110 +00000001 |
和值:补码表示 | 11111111 |
1111 1111 是 -1 的补码。补码操作是可逆的,因此,11111111 的补码就是 0000 0001。
十六进制数的补码
将一个十六