Wrayの知识库 Wrayの知识库
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
  • 操作系统概述
  • 计算机基础

    • 计算机系统全景
    • 数制编码与数据表示
      • 1. 学习目标
      • 2. 知识框架
      • 3. 核心概念
      • 4. 机制与实践
      • 5. 常用命令与工具
      • 6. 常见误区
      • 7. 进阶研究方向
      • 8. Tips 快问快答
      • 9. 总结
    • CPU架构与指令执行
    • 内存层次与缓存
    • 总线IO与设备模型
    • 文件存储与磁盘
    • 网络基础与协议栈
    • 虚拟化容器与云基础
  • 操作系统原理

  • Linux

  • MacOS

  • Windows

  • 系统工程与研究专题

目录

数制编码与数据表示

计算机只能直接处理二进制,但业务世界有整数、小数、字符、图片和协议字段。理解数据表示,是理解溢出、乱码、序列化、网络协议和文件格式的基础。

# 1. 学习目标

  • 理解二进制、十六进制、补码和浮点数的基本含义。
  • 能解释字符编码和乱码产生的原因。
  • 能在排查协议、文件和跨平台问题时识别数据表示差异。

# 2. 知识框架

数制编码与数据表示
├─ 入门:建立术语、对象和日常操作的直觉
├─ 进阶:理解机制、边界和跨平台差异
└─ 专家:能排障、能设计、能阅读实现和研究材料

数据表示的主线是:真实信息先编码成字节,字节按约定解释成数字、字符或结构。如果双方约定不一致,就会出现溢出、精度丢失或乱码。

# 3. 核心概念

主题 说明 工程关注
补码 有符号整数在计算机中的常见表示方式 整数溢出、位运算、边界值
浮点数 用符号位、指数和尾数近似表示小数 金额计算不能直接依赖浮点精确性
字符集 字符到码点和字节序列的映射规则 UTF-8、GBK、UTF-16 转换
字节序 多字节数据在内存或网络中的排列顺序 网络协议、二进制文件、跨平台通信

# 4. 机制与实践

  1. 阅读二进制协议时先确认字段长度、字节序、字符集和对齐规则。
  2. 处理文本文件时显式指定 UTF-8,避免依赖系统默认编码。
  3. 金额和账务计算使用整数分或高精度十进制类型,而不是普通浮点数。

# 5. 常用命令与工具

命令或工具 作用 使用建议
xxd file.bin 按十六进制查看文件内容 排查二进制协议和文件头时使用
file sample.txt 识别文件类型和可能的编码 只能作为参考,不能替代协议约定
iconv -f GBK -t UTF-8 a.txt 转换文本编码 迁移老系统文件时常用

# 6. 常见误区

  • 把字符数量等同于字节数量:UTF-8 中一个中文通常占多个字节,截断字符串时可能破坏编码。
  • 用浮点数处理金额:二进制浮点不能精确表示很多十进制小数。
  • 忽略字节序:同一串字节在大端和小端解释下可能是完全不同的数字。

# 7. 进阶研究方向

  • 阅读 IEEE 754 浮点标准的基本结构。
  • 研究 UTF-8 为什么能够兼容 ASCII 并支持变长编码。
  • 用十六进制工具观察 PNG、Class、ELF、PE 等文件头。

# 8. Tips 快问快答

Q:为什么会乱码?

A:写入时使用一种编码,读取时按另一种编码解释,同一组字节就会被映射成错误字符。

Q:为什么十六进制在系统领域常见?

A:十六进制每一位正好对应 4 个二进制位,表示字节和地址更紧凑。

Q:补码有什么好处?

A:补码让加减法可以用同一套硬件电路处理,同时只有一个零,边界规则也更统一。

# 9. 总结

数据表示决定了程序如何理解字节。掌握数制、补码、浮点、字符集和字节序后,很多看似诡异的溢出、乱码和协议问题都会变成可解释的问题。

上次更新: 2026/06/25, 10:02:19
计算机系统全景
CPU架构与指令执行

← 计算机系统全景 CPU架构与指令执行→

Copyright © 2023-2026 Wray | 鄂ICP备2024050235号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式