1.原码
约定数码序列的最高位为符号位,符号位为0表示正数,1表示负数
真值x | [x]原 |
+0.1001 | 0.1001 |
-0.1001 | 1.1001 |
+1001 | 1001 |
-1001 | 11001 |
-
定点小数的原码 [x]原=x (0 <= x < 1);
[x]原=1-x (-1 < x <= 0)
x表示真值,[x]原表示原码表示的机器数
例如:
x = +0.1011, [x]原=0.1011
x = -0.1011, [x]原=1-(-0.1011)=1.1011
-
定点整数的原码 [x]原=x (0 <= x < 2^n)
[x]原=2^n - x ( - 2^n < x <= 0)
n表示原码序列的位数
例如:
x = +1011, [x]原=01011
x = -1011, [x]原=2^4 -(-1011)= 10000+1011=11011
原码的0有两种表示方法(以定点小数为例)
- [+0]原 = 0.00...0 , [-0]原 = 1-(-0.00...0)=1.00...0
-
补码
- 思想:减去一个数等效于加上一个负数
-
定点小数的补码 [x]补=x (0 <= x < 1);
[x]补=2+x (-1 < x <= 0)
例如:
x = +0.1011, [x]补=0.1011
x = -0.1011, [x]补=2+(-0.1011)=10.0000-0.1011=1.0101
定点整数的补码 [x]补=x (0 <= x < 2^n)
[x]补=2^(n+1) + x (-2^n < x <= 0)
n表示补码序列的位数
例如:
x = +1011, [x]补=01011
x = -1011, [x]补=2^5 +(-1011)= 10000-1011=10101
原码与补码的互换
x>0时,原码与补码相同
x<0时,符号位不变,其他各位求反,末尾数再加1,即求反加1
l例如:
x = 0.1010 , [x]原 = 0.1010,[x]补 = 0.1010
x = -0.1010 , [x]原 = 1.1010,[x]补 = 1.0110
反码
思想:符号位与原码一样,数值部分,对于正数来说与原码一样,负数则按位取反。
定点小数: [x]反 = x (0 <= x < 1)
[x]反 = (2-2^(-n))+ x (-1 < x <= 0)
定点整数: [x]反 = x (0 <= x < 2^n)
[x]反 = (2^(n+1) - 1) + x (-2^n < x <= 0 )
ex:
x = +0.1001,[x]原 = 0.1001,[x]反 = 0.1001
x = -0.1001,[x]原 = 1.1001,[x]反 = 1.0110
移码
[x]移 = 2^n + x ( -2^n <= x < 2^n)
eg:
x = +1011, [x]移 = 2^4+1011 = 10000+1011=11011
x = -1011, [x]移 = 2^4 + 1011 = 10000-1011 = 00101