03.Integer, Floating-point and Decimal Representation
信息的二进制编码
-
什么是信息?
- Infotmation is a message that is previously uncertain to receivers
-
怎么表示信息?
- Codebook (Dictionary)
-
怎么度量信息?
- 朴素的做法: 度量码长
- 前提: 没有歧义表达 (如: A-0 B-1 C-10 若要表达10, 既有BA又有C,发生歧义)
- 累加上(每个字符出现的概率 * 该字符所拥有的比特数)
- 三个公设
- Monotonicity in event probability: 事件所发生的概率作为度量的标准
- Additivity: 两个独立事件发生概率可加
- Continuity
- 自信息量: I(xi) = -log2p(xi)
- 一个系统的信息熵
- 朴素的做法: 度量码长
-
在冯诺依曼结构中, 所有信息 (代码和数据) 都采用二进制编码
- 编码: 用少量简单的基本符号对复杂多样的信息进行一定规律的组合
- 采用二进制的原因
- 制造两个稳定态的物理器件容易
- 二进制编码和计数运行规则简单
- 对应逻辑命题中的"真"和"假"
- 便于使用逻辑电路实现算术运算
- 真值和机器数
- K位的二进制编码至多表示**2k**个不同的值
整数的二进制数表示
-
计算机中几乎不直接使用反码, 整数运算普遍使用补码
原码
-
优点: 最直接, 便于理解
-
缺点:
- 0的表示不唯一, 不利于程序员编程
- 加减运算方式不统一, 尤其当a<b时, 实现a-b比较困难
- 需要额外对符号位进行处理, 不利于硬件设计
补码
-
x补码 + (-x)补码 = 2k
-
证明为什么是取反加一: (-x)补码 = ((2k - 1) - x补码) + 1
-
通过补码算真值
-
补码很难直接判断真值的大小
-
补码原理
移码
-
优势: 比大小
-
将每一个数值加上一个偏置常数 (bias), 通常当编码位数为n时, bias取2n-1 - 1或2n-1
-
当bias为2n-1, 移码和补码仅第一位不同, 且0表示唯一
-
如n = 4时, bias = 8 = 1000
浮点数的二进制表示
-
-1.01 * 220
- 符号: -
- 尾数: 1.01
- 基/底: 2
- 阶/指数: 20
-
规格化表示
-
±1.bbb … b * 2E
-
X = (-1)S * M * 2E
-
E使用移码: 例如计算1.01 * 2-1 + 1.11 * 23时, 须要将低阶 (2-1) 转成高阶 (23), 那么首先需要比较-1和3的大小
-
M使用原码: 对称, 无符号时原码的乘法运算简单
S E M 1位 8位移码 23位原码表示24位尾数 (因为第一位永远是1) -
最大正数: (2 - 2-23) * 2128 因为1.11…11 = 1 + 0.11…11 = 1 + (1 - 0.00…01) = 2 - 2-23
-
最小正数: 2-127 E = 0, M = 0
-
对一定长度 (总位数不变) 的规格化数, 表示范围和精度之间存在权衡问题
- 增加阶码 (E) 位数: 扩大表示范围, 降低表示精度
- 增加尾数 (M) 位数: 减少表示范围, 提高表示精度
- 更大的底 (B) 位数: 扩大表示范围, 降低表示精度
-
值的范围
-
-
IEEE 754 标准
-
32位单精度
S E M 1位符号位 8位移码 23位有效值 -
64位双精度
-
S E M 1位符号位 11位移码 52位有效值
-
-
E: 全0和全1表示特殊值, 范围是 0000 0001 (-126) ~ 1111 1110 (127)
-
值的范围:
-
全0和全1
-
用于表示格式化数以外的情况
-
负上溢和正上溢只能表示无穷
-
-