差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 初级程序员考试:小抄 [2026/06/22 23:24] – 创建 张叶安 | 初级程序员考试:小抄 [2026/06/22 23:25] (当前版本) – [含符号数值的表示] 张叶安 | ||
|---|---|---|---|
| 行 58: | 行 58: | ||
| | 移码 | **补码符号位取反** \\ (数值位不变) | 01100111 | 10011001 | 便于浮点数阶码比较,0唯一 | **浮点数阶码** \\ 便于比较指数大小(IEEE 754标准使用) | | | 移码 | **补码符号位取反** \\ (数值位不变) | 01100111 | 10011001 | 便于浮点数阶码比较,0唯一 | **浮点数阶码** \\ 便于比较指数大小(IEEE 754标准使用) | | ||
| - | 以 8位补码 计算 10 - 25 = -15 为例,走一遍完整的二进制演算过程: | ||
| - | |||
| - | 第1步:找 +10 的补码 | ||
| - | |||
| - | +10 是正数,补码 = 原码 = 00001010 | ||
| - | |||
| - | 第2步:找 -25 的补码(核心) | ||
| - | |||
| - | · +25 的原码:00011001 | ||
| - | |||
| - | · 取反得反码:11100110 | ||
| - | |||
| - | · 末位 +1 得补码:11100111(这就是 -25 的补码表示) | ||
| - | |||
| - | 第3步:执行加法(CPU 实际做的事) | ||
| - | |||
| - | < | ||
| - | 00001010 | ||
| - | + 11100111 | ||
| - | ──────────── | ||
| - | 11110001 | ||
| - | </ | ||
| - | |||
| - | 第4步:将结果补码转回十进制(验证) | ||
| - | |||
| - | · 结果 11110001,符号位为 1(负数) | ||
| - | |||
| - | · 末位 -1 得反码:11110000 | ||
| - | |||
| - | · 取反得原码:10001111(符号位1不变,数值位 0001111 = 15) | ||
| - | |||
| - | · 所以结果是 -15 ✅ | ||
| - | |||
| - | 额外观察:溢出处理 | ||
| - | |||
| - | 这次计算中,最高位(第8位)没有产生进位,所以结果是正确的。 | ||
| - | |||
| - | 如果计算 125 + 125 = 250(超出127范围): | ||
| - | |||
| - | < | ||
| - | 01111101 | ||
| - | + 01111101 | ||
| - | ──────────── | ||
| - | 11111010 | ||
| - | </ | ||
| - | |||
| - | 符号位从 0 变成 1,产生了溢出,CPU 的溢出标志位(OF) 会置1提醒。 | ||
| ====== ±0的表示 ====== | ====== ±0的表示 ====== | ||