1、学习目标

机器只能直接处理二进制。本章要解决:整数、负数、小数、字符、错误检测在机器里如何表示,以及这些表示会如何影响运算结果。

模块 要掌握的内容
数制 二进制、八进制、十六进制和转换
整数表示 原码、反码、补码、移码
定点/浮点 定点小数、IEEE 754 浮点数
字符编码 ASCII、汉字编码、Unicode 直觉
基本运算 加减乘除、移位、溢出
数据校验 奇偶校验、海明码、CRC

2、数制与位权

二进制数:

1
(1011.01)_2 = 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 + 0*2^-1 + 1*2^-2

常见换算:

进制 特点
二进制 机器内部表示
八进制 3 位二进制对应 1 位八进制
十六进制 4 位二进制对应 1 位十六进制
十进制 人类常用

十六进制很适合读机器数据,因为一个字节正好是两位十六进制。

3、原码、反码、补码、移码

设机器字长为 n

表示 规则 特点
原码 符号位 + 数值绝对值 直观,但有 +0-0
反码 正数同原码,负数数值位取反 仍有双零
补码 正数同原码,负数按模取补 加减统一,无双零
移码 真值加偏置 常用于浮点阶码

补码范围:

1
n 位补码:[-2^(n-1), 2^(n-1)-1]

8 位补码范围:

1
[-128, 127]

补码的好处:

  1. 加法器可以同时处理加法和减法。
  2. 零只有一种表示。
  3. 最高位既参与数值,又可作为符号判断。

4、补码运算与溢出

补码加法直接按二进制相加,丢弃最高进位。

溢出判断:

情况 是否溢出
正数 + 正数 = 负数 溢出
负数 + 负数 = 正数 溢出
正负相加 不会溢出

也可用符号位进位判断:

1
最高数值位进位 Cn-1 与符号位进位 Cn 不同,则溢出。

注意:无符号数关注进位,有符号补码关注溢出,两者不是同一个概念。

5、定点数

定点表示把小数点固定在某个位置。

类型 说明
定点整数 小数点默认在最低位之后
定点小数 小数点默认在符号位之后

定点数硬件实现简单,常用于整数运算、嵌入式或对精度范围可控的场景。

6、浮点数

浮点数采用类似科学计数法:

1
N = (-1)^S * M * R^E

IEEE 754 单精度 32 位:

字段 位数 含义
S 1 符号位
E 8 阶码,采用偏置表示
M 23 尾数小数部分

单精度阶码偏置:

1
Bias = 127

规格化数默认尾数有隐藏的最高位 1

1
1.M

浮点数要重点理解:

  1. 表示范围有限。
  2. 很多十进制小数无法精确表示。
  3. 运算需要对阶、尾数运算、规格化、舍入。
  4. 浮点加法不一定满足数学上的结合律。

7、字符编码

ASCII 使用 7 位编码常用英文字符:

1
2
3
'A' = 65 = 0x41
'a' = 97 = 0x61
'0' = 48 = 0x30

中文字符通常涉及更复杂的编码体系,如 GB 系列、Unicode、UTF-8 等。

要区分:

概念 说明
字符集 有哪些字符
编码 字符如何映射为数字
编码格式 数字如何存成字节序列

UTF-8 是变长编码,英文字符 1 字节,中文常用 3 字节。

8、基本运算方法

8.1 加减法

补码系统中:

1
x - y = x + (-y)

因此减法可以转成加法。

8.2 移位

类型 含义
逻辑左移 低位补 0
逻辑右移 高位补 0
算术右移 高位补符号位

算术右移常用于有符号数除以 2 的近似,但负数舍入方向要小心。

8.3 乘除法

硬件乘法可以看作移位和加法的组合;除法可以看作移位和减法的组合。现代 CPU 通常有专门乘除法部件,但理解移位加减有助于看懂底层实现。

9、数据校验

数据传输和存储可能出错,因此需要校验。

方法 能力
奇偶校验 检测奇数位错误,不能定位
海明码 可纠正一位错误,检测部分多位错误
CRC 检错能力强,常用于网络和存储

9.1 奇偶校验

增加 1 位校验位,使 1 的个数为奇数或偶数。

缺点:如果同时错两位,奇偶性不变,检测不到。

9.2 海明码

海明码通过多个校验位形成综合症,用来定位错误位置。

常见规则:

1
校验位放在 1, 2, 4, 8 ... 这些 2 的幂位置。

9.3 CRC

CRC 把数据看成多项式,用生成多项式做模 2 除法,余数作为校验码。接收端重复计算余数判断是否出错。

10、易错点

易错点 修正
补码和原码混用 运算主要用补码
无符号进位当有符号溢出 两者判断标准不同
浮点数以为都精确 很多十进制小数无法精确二进制表示
逻辑右移和算术右移混淆 有符号数通常关注算术右移
奇偶校验以为能纠错 奇偶校验只能检错,不能定位

11、复盘清单

检查项 状态
能在二进制、十六进制之间快速转换 待复盘
能写出 8 位补码范围 待复盘
能判断补码加法溢出 待复盘
能拆解 IEEE 754 单精度字段 待复盘
能区分字符集、编码和编码格式 待复盘
能说明奇偶校验、海明码、CRC 的差别 待复盘