2.1 位权数制与数值表示
第 1 章中,存储器和总线传送的是比特模式。只有选定一种解释规则后,比特模式才具有数值含义。本节先从熟悉的十进制规则出发,再把它推广到其他底数。
数字所在的位置决定贡献
在十进制数 505 中,两个 5 的贡献并不相同:
位权数制(positional number system)为每个位置分配权重。最右侧整数位的权重是 ,左边一位的权重是 ;每向左移动一位,权重就乘以底数或基数(base/radix) 。
对于四位数 :
每个数字都必须满足 。因此,二进制只允许 0 与 1;八进制允许 0 到 7;十六进制需要十六个符号,通常使用 0–9 与 A–F。
| 底数 | 常用名称 | 允许的数字符号 | 向左一位意味着 |
|---|---|---|---|
| 2 | 二进制 | 0、1 | 乘 2 |
| 8 | 八进制 | 0–7 | 乘 8 |
| 10 | 十进制 | 0–9 | 乘 10 |
| 16 | 十六进制 | 0–9、A–F | 乘 16 |
在十六进制中,A 表示十,B 表示十一,一直到 F 表示十五。它们是数字符号,不是变量。
实验 1——从各位贡献构造数值
选择底数并旋转四个数字轮。每个方格都会显示该位的权重与当前贡献,因此可以直接观察为什么改变左侧数字通常比改变右侧数字影响更大。
请完成全部底数任务。然后只把最左位增加一次,在读取更新结果前先预测总值会改变多少。
示例:相同符号在不同底数下
数字串 1011 并不对应唯一数值;底数也是含义的一部分。
在二进制中:
在十进制中:
在数字右下角写出底数,可以消除歧义。当上下文已经明确时,工程资料有时会省略底数;严谨的推导仍应主动标明。
前导零不会改变数值:
但前导零仍可能具有工程意义,因为 001011 明确表示六位存储宽度,而 1011 没有说明宽度。
基数点把位权扩展到右侧
十进制小数中的点是基数点(radix point);“小数点”是它在十进制中的特例。基数点右侧使用负指数位权:
例如:
基数点右边第一位,在二进制中值二分之一,在八进制中值八分之一,在十进制中值十分之一,在十六进制中值十六分之一。
| 位置 | 二进制位权 | 十进制位权 |
|---|---|---|
| 2 | 4 | 100 |
| 1 | 2 | 10 |
| 0 | 1 | 1 |
| −1 | 0.5 | 0.1 |
| −2 | 0.25 | 0.01 |
| −3 | 0.125 | 0.001 |
可用位数决定精度
固定数量的小数位会产生一个最小步长。三个二进制小数位的最小步长是:
这种格式可以精确表示 5.625,却不能精确表示 5.6,因为 5.6 不是 0.125 的整数倍。系统必须进行舍入、截断,或使用更多小数位。
这并不是二进制的缺陷。固定小数位数的十进制也有相同限制:两位十进制小数无法精确表示三分之一。
实验 2——同时控制数值与精度
请使用三个整数位和三个小数位构造目标。实时误差会说明当前值过小还是过大,每个数字还会显示自己的精确贡献。
精确命中后,把最右位改成零并测量损失的精度,再比较底数 2、8、10 与 16 的最小步长。
检查点
一个位权表示由三项因素决定:
1. 底数 ;
2. 从 到 的合法数字符号;
3. 位权 ,其中基数点右侧使用负指数。
下一节会把这个定义转化为二、八、十、十六进制之间的实用转换流程。