可以用原码,反码,补码三种方式来表示定点整数和定点小数。还可以用移码来表示定点整数。
若真值为x,则[x]原,[x]反,[x]补,[x]移分别表示真值所对应的原码,反码,补码,移码
反码:
若符号位为0,则原码与反码相同
若符号位为1,则数值位全部取反
若机器字长为n + 1位,反码整数的表示范围:
-(2^n - 1) <= x <= 2^n - 1(关于原点对称)
真值0有 +0 和 -0两种形式
[+0]原 = 00000000 [-0]原 = 10000000
[+0]反 = 00000000 [-0]反 = 11111111
若机器字长为 n + 1位,反码小数的表示范围:
-(1 - 2^ -n) <= x <= 1 - 2^-n (关于原点对称)
真值0有+0 和 -0两种形式
补码:
正数的补码 = 原码
负数的补码 = 反码末位 + 1(考虑进位)
[+0]原 = 00000000 [-0]原 = 10000000
[+0]反 = 00000000 [-0]反 = 11111111
[-0]的反码+1后会产生进位,所以[+0]补 = [-0]补 = 00000000
因为补码的真值0只有一种表示状态,原码有两种状态可以表示0
那么多出来的一种表示什么呢?
定点整数补码[x]补 = 1,0000000 表示x = -2^7
若机器字长为n + 1位,补码整数的表示范围:
-2^n <= x <= 2^n - 1 (比原码多表示一个-2^n)
定点小数补码[x]补 = 1,0000000表示x = -1
若机器字长为n + 1位,补码整数的表示范围:
-1 <= x <= 1- 2^-n (比原码多表示一个-1)