第三讲 数据的机器级表示
信息的二进制编码
在冯·诺依曼结构中,所有信息(代码和数据)都采用二进制编码
采用二进制的原因:
- 多种物理器件可以表示两种稳定的状态,用于表示0和1
- 二进制的编码和运算规则简单
- 1和0可以对应逻辑命题中的“真”和“假”
整数的二进制表示
采用补码表示法
100…000 ~ 111…111:表示的值由2^(k-1)2^k-1变为-2^(k-1)-1
真值为原来的无符号数对应的真值减去2^k(取反加1的由来)
−2^𝑛−1 ≤ 𝑋 ≤2^𝑛−1 −1
浮点数的二进制表示
分为规格化数和非规格化数
规格化数
1.bb…b * 2^E
- 尾数(S)的第1位总是1,不需要存于尾数字段中(默认省略)
- 阶码(E)的真实值加偏移量(127)后,再存入阶码字段中(移码)
- 底(B)默认为2
负数范围: - (2-2^-23) * 2^128 到 -1 * 2^-127
正数范围: 1 * 2^-127 到 (2-2^-23) * 2^128
非规格化数处理了规格化数中接近于0的那部分
当结果的阶值太小时,通过右移进行非规格化;每次右移阶值增,直到阶值落在可表示范围内
IEEE754标准
- 正无穷大: 阶码全1, 尾数全0
- NaN: 阶码全1, 尾数不为全0
舍入: 当数值表示浮点格式时,可能需要用靠近真值的浮点数替代
- 就近舍入:数值被舍入成最近的可表示的数
- 朝+∞舍入:数值朝正无穷大方向向上舍入
- 朝−∞舍入:数值朝负无穷大方向向下舍入
- 朝0 舍入:数值朝0 舍入
二进制编码的十进制数表示
NBCD码
正: 1100
负: 1101