带符号数的表示, 概念辨析:真值、机器数、原码、反码、补码、移码

1. 真值
真值即用十进制, 或二进制等进制表示的一个数

2. 机器数
理解为机器中使用的数, 即二进制表示的数, 两种, 无符号数和有符号数

3. 原码
原码是与真值形式最接近的机器数, 最高位为符号位(0 表示正数, 1表示负数), 符号位后面是数值部分, 用绝对值表示, 举例来说, -0为1000,-7为1111,5为0101, 另从50年代开始,浮点数的小数用原码定点小数表示。

4. 反码
反码是一种特殊补码形式的机器数, (用原码表示的数)正数的反码是它本身, 负数的反码是符号位保持不变, 其余各位取反。

5. 补码
正数的补码是它本身, 负数的补码是符号位不变, 其余各位取反后加1

6. 移码
移码适合比较大小, 真值大时, 对应的移码也大, 真值小时, 对应的移码也小。
移码:将每一个数值加上一个偏置常数bias。

通常:当编码位数为n时
1. bias取2^n-1
2, bias取2^(n-1)-1
当bias为 2^(n-1)-1 时,移码和补码仅第一位不同, 此时补码和移码之间的关系为, 补码的数值部分不变,符号取反,即得移码。由移码也可得补码。

举例:E(biased) = E + 2^3(bias = 2^3 = 1000B)可以得到:-8(+8) ~ 0000B,0(+8) ~ 1000B

用途:移码用来表示浮点数的阶(便于浮点数加减运算时的对阶操作,比较大小)。

举例:1.01 * 2^(-1) + 1.11 * 2^3 中,运用移码可以简化比较:

将原式变为 1.01 * 2^(-1+4) + 1.11 * 2^(3+4) 就可以得到011(3)<111(7)

猜你喜欢

转载自blog.csdn.net/qq_40212930/article/details/88698143