数的表示

对于一个数字:

真值:书写表示的数值。
机器码:机器中实际的编码。

例如: 对于数字 10. 我们说10, 就是该数的真值。而 00001010 表示机器中以8位二进制表示的10

原码

最高位为符号位,
1 为 负,0为正。

其余数位则为真值的二进制表示。
实际上在计算机中不常见。

反码

就是在原码的基础上,对所有数位进行取反。

补码

补码的目的是为了在加减法计算中,可以通过相同的电路进行计算。
从原码转补码的方法有两种:

  1. 正数不变,负数除了符号以外都取反+1。
  2. 如果是正数,当然不用改变。如果是负数,则符号位不变,最低的1不变,中间的数位取反。

例如要对数$11001010$(原码)转换为补码。

  1. 若采用方法1
    1. 是负数,则除了第一位以外全部取反,得到$10110101$
    2. $+1$得到 $10110110$
  2. 采用方法2: 是负数,则第一位和最后一个1不变,中间的取反,得到$10110110$

将补码转换为原码同样可以采用和上述一致的操作。
(换言之,补码是成对出现的,二者是互补的关系)

移码

也叫增码或偏置码。
从形式上将,移码是在补码基础上,
符号位与补码相反,其余部分相同。

移码是 IEEE 754 标准浮点数的阶码表示方法,其原因可以见后文。

例子

下面为几个上述机器码的实例,
都使用8位二进制数表示,
首位为符号位。

真值原码反码补码移码
1000001010111101010000101010001010
-1010001010011101011111011001110110
-128无法表示无法表示1000000000000000
-12711111111000000001000000100000001

数据格式

存储一个数据需要考虑以下因素:

  1. 类型(小数、整数、实数、复数)
  2. 可能的数值范围
  3. 精确度
  4. 数据存储和处理所需的硬件代价

计算机中的数据格式大致分为两类:

  1. 定点格式
  2. 浮点格式

定点格式

小数点的位置固定不变

定点纯小数

对于n位的纯小数:

$0 \leq |x| \leq 1-2^{-n}$

定点纯整数

对于n位的纯整数

$0 \leq |x| \leq 2^n - 1$

浮点格式

计算机中任意一个数

$$ N = 2^e . M $$

不过需要注意:这并不是标准的浮点数格式。
标准的浮点数格式为 IEEE 754

IEEE 754 - 维基百科,自由的百科全书

各种格式的取值范围