{"name":"数据的表示","id":"计算机系统-程序结构和执行-数据的表示","content":"# 数据的表示\n\n## 一、总论：数据表示的第一性原理\n\n计算机中的一切数据表示，本质上都是在**硬件约束**下，对现实世界信息所做的**工程近似**。\n\n### 1. 硬件的三大根本约束\n\n1. **离散性（Discrete）**\n   计算机只能处理有限位宽的二进制状态（0 / 1），无法直接表示连续无限的实数。\n\n2. **统一性（Uniformity）**\n   数据的表示方式必须与运算电路匹配，否则会导致逻辑复杂、成本上升。\n\n3. **可预测性（Predictability）**\n   所有误差、溢出、舍入都必须是**可分析、可界定、可复现的**。\n\n> 后续所有整数、浮点、字符、校验机制，都是在这三条约束下的不同工程解法。\n\n---\n\n## 二、数值表示（一）：整数的表示哲学\n\n### 1. 问题本质\n\n> 如何在有限位宽内，**同时表示正负、大小，并统一运算规则**？\n\n这是整数表示的核心矛盾。\n\n---\n\n### 2. 表示方式的演化逻辑（而非并列记忆）\n\n| 表示方式 | 设计动机        | 根本缺陷          |\n| ---- | ----------- | ------------- |\n| 原码   | 直观区分正负      | +0 / -0，运算不统一 |\n| 反码   | 尝试统一加法      | 仍存在双零         |\n| 补码   | **统一表示与运算** | 表示范围不对称（可接受）  |\n\n---\n\n### 3. 补码的设计本质\n\n补码并不是\"技巧\"，而是**电路友好型设计**：\n\n* 符号位不再是\"特殊位\"，而是数值的一部分\n* 加法器无需区分正负\n* 减法可转化为加法\n\n数学解释（n 位补码）：\n\n[\n\\mathsf{B2T}*n(x) = -x*{n-1} \\times 2^{n-1} + \\sum_{i=0}^{n-2} x_i \\times 2^i\n]\n\n> 结论：**补码的价值不在表示，而在运算统一性**。\n\n---\n\n### 4. 移码（偏置表示）\n\n* 本质：对补码最高位取反\n* 目的：将有符号数映射为无符号空间\n* 典型用途：浮点数阶码\n\n---\n\n## 三、数值表示（二）：浮点数的工程近似模型\n\n### 1. 浮点数不是\"精确数\"\n\n| 层次 | 描述           |\n| -- | ------------ |\n| 数学 | 实数是连续、无限的    |\n| 计算 | 浮点数是离散的科学计数法 |\n| 工程 | 精度有限，误差必然    |\n\n> 浮点数的设计目标不是\"准确\"，而是**可预测误差**。\n\n---\n\n### 2. 统一模型\n\n[\nValue = (-1)^S \\times M \\times 2^E\n]\n\n* **S（符号位）**：决定正负\n* **E（偏置阶码）**：决定表示范围\n* **M（尾数）**：决定有效精度\n\n> 阶码决定\"能有多大/多小\"，尾数决定\"有多准\"。\n\n---\n\n### 3. IEEE 754：工程权衡的产物\n\n| 类型  | 阶码   | 尾数   | 特点   |\n| --- | ---- | ---- | ---- |\n| 单精度 | 8 位  | 23 位 | 性能优先 |\n| 双精度 | 11 位 | 52 位 | 精度优先 |\n\n设计哲学：\n\n* 牺牲绝对精确\n* 换取跨平台一致性\n\n---\n\n### 4. 浮点加法与精度丢失\n\n**核心原因**：\n\n* 指数必须对齐\n* 小数可能被右移出尾数范围\n\n> 当两个数的量级差超过尾数位数时，小数将被直接舍弃。\n\n工程补救方案：\n\n* Kahan Summation：记录并补偿舍入误差\n\n> 本质：**误差管理，而非消除误差**。\n\n---\n\n## 四、符号表示：字符编码的统一抽象\n\n### 1. 字符编码的本质模型\n\n```\n字符编码系统 = 字符集 × 编码规则 × 存储/传输假设\n```\n\n* 字符 ≠ 字节\n* 编码是\"映射规则\"，不是字符本身\n\n---\n\n### 2. 编码体系的演进逻辑\n\n| 编码           | 设计背景 | 核心特征   |\n| ------------ | ---- | ------ |\n| ASCII        | 英文世界 | 7 bit  |\n| GB2312 / GBK | 中文扩展 | 双字节    |\n| UTF-16       | 内存友好 | 定长代码单元 |\n| UTF-8        | 网络友好 | 变长、自同步 |\n\n---\n\n### 3. UTF-8 vs UTF-16 的本质差异\n\n| 维度 | UTF-8  | UTF-16 |\n| -- | ------ | ------ |\n| 存储 | 变长     | 相对定长   |\n| 容错 | 强（自同步） | 弱      |\n| 网络 | 友好     | 不友好    |\n| 内存 | 一般     | 高效     |\n\n> 选择编码，本质是**场景权衡**。\n\n---\n\n## 五、可靠性设计：数据校验与纠错\n\n### 1. 第一性原理\n\n> 错误不可避免，只能被检测与控制。\n\n核心手段：**增加冗余，扩大码距**。\n\n---\n\n### 2. 码距与能力边界\n\n* 码距 ≥ e + 1：可检测 e 位错误\n* 码距 ≥ 2t + 1：可纠正 t 位错误\n\n---\n\n### 3. 校验机制的系统选型视角\n\n| 场景   | 错误模型  | 典型方案 |\n| ---- | ----- | ---- |\n| 内存   | 单比特错误 | 海明码  |\n| 网络   | 突发错误  | CRC  |\n| 简单设备 | 随机错误  | 奇偶校验 |\n\n> 校验方案不是算法选择，而是**系统风险管理决策**。\n\n---\n\n## 六、全局总结：统一认知框架\n\n```\n数据表示\n├── 第一性原理\n│   ├── 离散性\n│   ├── 统一性\n│   └── 可预测性\n├── 数值表示\n│   ├── 整数（补码）\n│   └── 浮点（IEEE 754）\n├── 符号表示\n│   └── 字符编码\n└── 可靠性\n    └── 校验与纠错\n```\n\n> **所有具体规则，都是工程权衡的结果，而非偶然设计。**\n\n## 关联内容（自动生成）\n\n- [/计算机系统/程序结构和执行/运算方法与运算器.md](/计算机系统/程序结构和执行/运算方法与运算器.md) 详细介绍了补码运算、浮点数运算等运算方法，与本文的数值表示内容密切相关\n- [/计算机系统/程序结构和执行/汇编.md](/计算机系统/程序结构和执行/汇编.md) 涉及浮点数在汇编层面的运算实现，包括浮点数加减乘除等操作\n- [/编程语言/JAVA/语言基础.md](/编程语言/JAVA/语言基础.md) 讨论了Java中浮点数误差的本质，遵循IEEE 754标准，与本文浮点数表示内容相关\n- [/编程语言/JAVA/Java谜题.md](/编程语言/JAVA/Java谜题.md) 涉及浮点数模型和IEEE754标准，以及浮点数在实际编程中的问题\n- [/DSL/SQL.md](/DSL/SQL.md) 包含SQL中浮点数类型的定义和使用，与数据表示中的数值表示相关\n- [/中间件/数据库/数据类型.md](/中间件/数据库/数据类型.md) 讨论了数据库中的数据类型，包括浮点数类型，与本文数值表示内容相关\n- [/计算机网络/应用层.md](/计算机网络/应用层.md) 涉及数据表示在网络协议中的应用，包括文本、二进制、结构化格式等\n- [/计算机网络/链路层.md](/计算机网络/链路层.md) 提到CRC校验码的使用，与本文数据校验部分相关\n- [/操作系统/输入输出.md](/操作系统/输入输出.md) 涉及数据校验机制，与本文可靠性设计部分相关\n- [/计算机系统/数字逻辑电路.md](/计算机系统/数字逻辑电路.md) 涉及补码运算，与本文整数表示部分相关\n- [/中间件/数据库/redis/集群.md](/中间件/数据库/redis/集群.md) 使用CRC16算法进行键值分布，与本文数据校验部分相关\n- [/中间件/数据库/索引.md](/中间件/数据库/索引.md) 使用CRC32进行数据校验，与本文数据校验部分相关\n- [/编程语言/JavaScript/JavaScript.md](/编程语言/JavaScript/JavaScript.md) 提到JavaScript使用IEEE-754双精度浮点数，与本文浮点数表示相关\n- [/计算机网络/rpc.md](/计算机网络/rpc.md) 涉及数据表示层，讨论如何描述与演化数据，与本文数据表示主题相关\n- [/数据技术/数据治理.md](/数据技术/数据治理.md) 涉及数据校验相关内容，与本文可靠性设计部分相关\n","metadata":"tags: ['计算机系统']","hasMoreCommit":true,"totalCommits":13,"commitList":[{"date":"2026-02-12T14:07:03+08:00","author":"MY","message":"doc: 整理标签","hash":"290b3e8ad18f48832ac282290238d020fc030a88"},{"date":"2026-01-12T17:09:26+08:00","author":"MY","message":"docs(computer-system): 完善数据表示文档内容","hash":"43aa5aeca343b9b7857a5e08c6233f6d848ca903"},{"date":"2024-12-03T17:16:06+08:00","author":"MY","message":"📦计算机系统","hash":"968238728e3c3b13116b44e2bdcaf504962841b9"},{"date":"2024-11-14T19:15:00+08:00","author":"MY","message":"📦计算机系统","hash":"5c5e65cc7dae2c91971a72f7a73dc3877be1a59c"},{"date":"2024-04-16T19:27:15+08:00","author":"MY","message":"✏C","hash":"99952a8ec19fca0df0f83df82488445c09f39e33"},{"date":"2023-11-24T11:45:52+08:00","author":"MY","message":"📦清理大图","hash":"e3ff900ed2a2e49e9f3bd316935fe853796f7e52"},{"date":"2022-07-07T20:59:41+08:00","author":"MY","message":"✏️更新 数据的表示","hash":"14c2cf55b20ce73090e9614d8f7d9f4579306dd5"},{"date":"2022-06-23T21:41:38+08:00","author":"MY","message":"✏️更新 数据的表示","hash":"51e62b1b7a5c1a6be9497caeb7d3965fadfcbd31"},{"date":"2022-06-23T21:09:40+08:00","author":"MY","message":"📦整理 数据的表示","hash":"f4f40ccc8edd6b4e554c4f373b57704bb126557f"},{"date":"2020-01-11T15:38:34+08:00","author":"MY","message":"增加定点数运算及溢出检测","hash":"f29d167349e589ca5dc33c07b2ac733e436ae9f1"}],"createTime":"2020-01-07T16:00:07+08:00"}