定点数据编码方法
为了运算方便,带符号的机器数有不同的编码方法,成为码制。
1、原码:又称符号绝对值码。
该数最高位为符号位,正数用“0”表示,负数用“1”表示。其他位为数据位,用二进制数绝对值表示。原码与真值转换方便,但做加减运算不便,且零有+0和-0两种表示方法。
2、反码:正数的反码表示与原码相同。
负数的反码,符号位用“1”表示,数值位由其绝对值各位取反得到。
反码零也有+0、-0两种表示方法。因运算不便使用较少。
3、补码:为了加减运算方便引入补码概念。关键思想是用加法代替减法。
正数的补码与原码表示相同。
负数的补码,符号位用“1”表示,数值位用其绝对值的补数表示(即原码各位求反,末位加1)。
补码最大优点是做加减运算方便。如(x+y)补=(x)补+(y)补,(x-y)补=(x)补+(-y)补。
补码符号位参加运算,不单独处理,现代计算机中大都采用补码系统。补码另一优点是零的表示形式是惟一的,即(+0000)补=(-0000)补=00000。
补码的表数范围比原码、反码略宽。在定点小数中,补码可以表示-1。
(-1)=1.0000,而原码、反码不能表示绝对值等于1的数。
原码、反码的表数范围是[-27-1 27-1]
补码的表数范围是[-27 27-1]
4、移码:为了比较两个整数的大小,引入移码概念。
移码与补码有类似的地方(数值部分),但符号位与补码相反,即正数的移码符号位为“1”,负数的移码符号位为“0”。或者说求一个数的移码,先求其补码再将其符号位变反即可得到。移码表数范围与补码整数的表数范围相同。
当编码总位数为8时有:
+127的原码、反码、补码都为:0 1111111。
-127的原码、反码、补码依次为:1 1111111、1 0000000、1 0000001。
+0、-0的原码分别为:0 0000000、1 0000000,均对应真值0。