数的表示
对于一个数字:
真值:书写表示的数值。
机器码:机器中实际的编码。
例如: 对于数字 10. 我们说10, 就是该数的真值。而 00001010 表示机器中以8位二进制表示的10
原码
最高位为符号位,
1 为 负,0为正。
其余数位则为真值的二进制表示。
实际上在计算机中不常见。
反码
就是在原码的基础上,对所有数位进行取反。
补码
补码的目的是为了在加减法计算中,可以通过相同的电路进行计算。
从原码转补码的方法有两种:
- 正数不变,负数除了符号以外都取反+1。
- 如果是正数,当然不用改变。如果是负数,则符号位不变,最低的1不变,中间的数位取反。
例如要对数$11001010$(原码)转换为补码。
- 若采用方法1
- 是负数,则除了第一位以外全部取反,得到$10110101$
- $+1$得到 $10110110$
- 采用方法2: 是负数,则第一位和最后一个1不变,中间的取反,得到$10110110$
将补码转换为原码同样可以采用和上述一致的操作。
(换言之,补码是成对出现的,二者是互补的关系)
移码
也叫增码或偏置码。
从形式上将,移码是在补码基础上,
符号位与补码相反,其余部分相同。
移码是 IEEE 754 标准浮点数的阶码表示方法,其原因可以见后文。
例子
下面为几个上述机器码的实例,
都使用8位二进制数表示,
首位为符号位。
真值 | 原码 | 反码 | 补码 | 移码 |
---|---|---|---|---|
10 | 00001010 | 11110101 | 00001010 | 10001010 |
-10 | 10001010 | 01110101 | 11110110 | 01110110 |
-128 | 无法表示 | 无法表示 | 10000000 | 00000000 |
-127 | 11111111 | 00000000 | 10000001 | 00000001 |
数据格式
存储一个数据需要考虑以下因素:
- 类型(小数、整数、实数、复数)
- 可能的数值范围
- 精确度
- 数据存储和处理所需的硬件代价
计算机中的数据格式大致分为两类:
- 定点格式
- 浮点格式
定点格式
小数点的位置固定不变
定点纯小数
对于n位的纯小数:
$0 \leq |x| \leq 1-2^{-n}$
定点纯整数
对于n位的纯整数
$0 \leq |x| \leq 2^n - 1$
浮点格式
计算机中任意一个数
$$ N = 2^e . M $$不过需要注意:这并不是标准的浮点数格式。
标准的浮点数格式为 IEEE 754