数据的表示

一、总论:数据表示的第一性原理

计算机中的一切数据表示,本质上都是在硬件约束下,对现实世界信息所做的工程近似

1. 硬件的三大根本约束

  1. 离散性(Discrete)计算机只能处理有限位宽的二进制状态(0 / 1),无法直接表示连续无限的实数。

  2. 统一性(Uniformity)数据的表示方式必须与运算电路匹配,否则会导致逻辑复杂、成本上升。

  3. 可预测性(Predictability)所有误差、溢出、舍入都必须是可分析、可界定、可复现的

后续所有整数、浮点、字符、校验机制,都是在这三条约束下的不同工程解法。


二、数值表示(一):整数的表示哲学

1. 问题本质

如何在有限位宽内,同时表示正负、大小,并统一运算规则

这是整数表示的核心矛盾。


2. 表示方式的演化逻辑(而非并列记忆)

表示方式设计动机根本缺陷
原码直观区分正负+0 / -0,运算不统一
反码尝试统一加法仍存在双零
补码统一表示与运算表示范围不对称(可接受)

3. 补码的设计本质

补码并不是"技巧",而是电路友好型设计

数学解释(n 位补码):

[\mathsf{B2T}n(x) = -x{n-1} \times 2^{n-1} + \sum_{i=0}^{n-2} x_i \times 2^i]

结论:补码的价值不在表示,而在运算统一性


4. 移码(偏置表示)


三、数值表示(二):浮点数的工程近似模型

1. 浮点数不是"精确数"

层次描述
数学实数是连续、无限的
计算浮点数是离散的科学计数法
工程精度有限,误差必然

浮点数的设计目标不是"准确",而是可预测误差


2. 统一模型

[Value = (-1)^S \times M \times 2^E]

阶码决定"能有多大/多小",尾数决定"有多准"。


3. IEEE 754:工程权衡的产物

类型阶码尾数特点
单精度8 位23 位性能优先
双精度11 位52 位精度优先

设计哲学:


4. 浮点加法与精度丢失

核心原因

当两个数的量级差超过尾数位数时,小数将被直接舍弃。

工程补救方案:

本质:误差管理,而非消除误差


四、符号表示:字符编码的统一抽象

1. 字符编码的本质模型

字符编码系统 = 字符集 × 编码规则 × 存储/传输假设

2. 编码体系的演进逻辑

编码设计背景核心特征
ASCII英文世界7 bit
GB2312 / GBK中文扩展双字节
UTF-16内存友好定长代码单元
UTF-8网络友好变长、自同步

3. UTF-8 vs UTF-16 的本质差异

维度UTF-8UTF-16
存储变长相对定长
容错强(自同步)
网络友好不友好
内存一般高效

选择编码,本质是场景权衡


五、可靠性设计:数据校验与纠错

1. 第一性原理

错误不可避免,只能被检测与控制。

核心手段:增加冗余,扩大码距


2. 码距与能力边界


3. 校验机制的系统选型视角

场景错误模型典型方案
内存单比特错误海明码
网络突发错误CRC
简单设备随机错误奇偶校验

校验方案不是算法选择,而是系统风险管理决策


六、全局总结:统一认知框架

数据表示├── 第一性原理│   ├── 离散性│   ├── 统一性│   └── 可预测性├── 数值表示│   ├── 整数(补码)│   └── 浮点(IEEE 754)├── 符号表示│   └── 字符编码└── 可靠性    └── 校验与纠错

所有具体规则,都是工程权衡的结果,而非偶然设计。

关联内容(自动生成)