无符号十进制整数 x 的二进制表示是之间将 x 不断整除 2,然后将余数反向排列得到。比如 8 的二进制表示为:0001000,7 的二进制表示为 00000111。二进制补码(two's-complement),是将字(word)的最高位解释为负权(negative weight),最高位为 1 时,表示值为负;最高位为 0 时,表示非负。
二进制补码的表示方式可以基于无符号整数的二进制来表示,需要经过两步:
1. 取十进制数值的绝对值,转变为二进制表示方法,之后将每位取反;
2. 增加符号位,如果为负数则加 1例如 8 的二进制表示为 00001000,-8 的二进制补码表示为 8(00001000)取反 (11110111) 加 1->1111 1000
我们来做 (-8) + (-5) 的加法运算
- 1111 1000
- + 1111 1011
- -------
- 1 1111 0011
在二进制补码计算时,如果最高位有进位,则被舍弃。因此 (-8)+(-5)=-13 的二进制补码结果为:1111 0011。
我们再做 - 8(1111 1000)+5(00000101)的操作:
- 1111 1000
- +0000 0101
- ----------
- 1111 1101
其结果为 1111 1101, 按照补码表示方法其值为 - 3
理解了补码加减法运算的规则,可以发现,补码有以下两个优点:
减法比较好理解,可以将被减数按位取反之后,再按照加法规则计算。
来源: http://www.tuicool.com/articles/FJJzuaQ