鸣潮自动化脚本完全指南:解放双手的游戏助手终极教程
2026/5/4 11:26:25
核心思想:最高位表示符号(0正1负),其余位表示绝对值。
例子(8位表示):
+18→ 原码:0001 0010-18→ 原码:1001 0010特点:
0000 0000和1000 0000都表示0核心思想:正数的反码等于原码,负数的反码是原码的符号位不变,其余位按位取反。
例子(8位表示):
+18→ 原码:0001 0010→ 反码:0001 0010-18→ 原码:1001 0010→ 反码:1110 1101特点:
0000 0000和1111 1111都表示0核心思想:正数的补码等于原码,负数的补码等于反码加1。
例子(8位表示):
+18→ 原码:0001 0010→ 补码:0001 0010-18:原码:1001 0010 取反:1110 1101 (反码) 加1:1110 1110 (补码)特点:
0000 0000-2ⁿ⁻¹到+(2ⁿ⁻¹ - 1)快速求负法:从右向左找到第一个1,这个1及其右边的位保持不变,左边的位全部取反。
-18的补码1110 1110→ 从右第一个1在倒数第二位,保留10,左边取反得1110 11,即1110 1110核心思想:真值加上一个固定偏移量K(通常K=2ⁿ⁻¹),使其全部变为非负数。
例子(8位,偏移量K=128):
+18→ 补码:0001 0010→ 移码:1001 0010(符号位取反)-18→ 补码:1110 1110→ 移码:0110 1110(符号位取反)0→ 补码:0000 0000→ 移码:1000 0000(=128)特点:
| 真值 | 原码 | 反码 | 补码 | 移码(K=8) |
|---|---|---|---|---|
| +7 | 0111 | 0111 | 0111 | 1111 |
| +6 | 0110 | 0110 | 0110 | 1110 |
| +5 | 0101 | 0101 | 0101 | 1101 |
| +4 | 0100 | 0100 | 0100 | 1100 |
| +3 | 0011 | 0011 | 0011 | 1011 |
| +2 | 0010 | 0010 | 0010 | 1010 |
| +1 | 0001 | 0001 | 0001 | 1001 |
| +0 | 0000 | 0000 | 0000 | 1000 |
| -0 | 1000 | 1111 | - | - |
| -1 | 1001 | 1110 | 1111 | 0111 |
| -2 | 1010 | 1101 | 1110 | 0110 |
| -3 | 1011 | 1100 | 1101 | 0101 |
| -4 | 1100 | 1011 | 1100 | 0100 |
| -5 | 1101 | 1010 | 1011 | 0011 |
| -6 | 1110 | 1001 | 1010 | 0010 |
| -7 | 1111 | 1000 | 1001 | 0001 |
| -8 | - | - | 1000 | 0000 |
| 特性 | 原码 | 反码 | 补码 | 移码 |
|---|---|---|---|---|
| 0的表示 | 两种(+0/-0) | 两种(+0/-0) | 一种 | 一种(非零值) |
| 表示范围(4位) | -7 ~ +7 | -7 ~ +7 | -8 ~ +7 | -8 ~ +7(但编码全是正数) |
| 加减运算 | 复杂,需判断符号 | 较简单,但有循环进位 | 最简单,统一为加法 | 用于比较,不做加减 |
| 硬件实现 | 复杂 | 较简单 | 最简单 | 简单 |
| 主要用途 | 早期计算机/浮点数尾数 | 历史过渡 | 现代整数运算标准 | 浮点数阶码 |
| 符号处理 | 最高位=符号 | 最高位=符号 | 最高位=符号 | 无符号(全是正数编码) |
| 数值连续性 | 不连续(有±0) | 不连续(有±0) | 连续 | 连续 |
A - B = A + (-B),减法器不需要了这四种编码方式共同构成了计算机处理有符号数的理论基础,其中补码无疑是最重要、最核心的概念。
| 编码方式 | 整数范围 | 小数范围(定点) | 零的表示 |
|---|---|---|---|
| 原码 | -(2ⁿ⁻¹ - 1) ~ +(2ⁿ⁻¹ - 1) 例(8位): -127 ~ +127 | -(1-2⁻⁽ⁿ⁻¹⁾) ~ +(1-2⁻⁽ⁿ⁻¹⁾) 例(8位): -0.992 ~ +0.992 | +0 和 -0 两个零 |
| 反码 | -(2ⁿ⁻¹ - 1) ~ +(2ⁿ⁻¹ - 1) 例(8位): -127 ~ +127 | -(1-2⁻⁽ⁿ⁻¹⁾) ~ +(1-2⁻⁽ⁿ⁻¹⁾) 例(8位): -0.992 ~ +0.992 | +0 和 -0 两个零 |
| 补码 | -2ⁿ⁻¹ ~ +(2ⁿ⁻¹ - 1) 例(8位):-128~ +127 | -1.0 ~ +(1-2⁻⁽ⁿ⁻¹⁾) 例(8位):-1.0~ +0.992 | 唯一零 |
| 移码 | 真值: -2ⁿ⁻¹ ~ +(2ⁿ⁻¹ - 1) 编码: 0 ~ (2ⁿ - 1) 例(8位): 真值-128+127<br>编码0255 | 不用于小数表示 (主要用于浮点数阶码) | 唯一零 (编码为2ⁿ⁻¹) |
原码 = 符号位 + 绝对值的二进制
最大正数:0 111...111= +(2^{n-1}-1)
最大负数:1 111...111= -(2^{n-1}-1)
反码 = 符号位 + 绝对值的按位取反(负数时)
以4位为例:
十进制 原码 反码 +3 0011 0011 ← 正数相同 -3 1011 1100 ← 负数取反关键:反码的负数表示范围与原码完全一致:
1 000...000在原码中是 -0,在反码中也是 -01 111...111在原码中是 -(2^{n-1}-1),在反码中也是 -(2^{n-1}-1)因为原码和反码都是1位符号号+其它数值位
100...000的含义| 二进制模式 | 原码含义 | 反码含义 | 补码含义 |
|---|---|---|---|
| 100…000 | -0(无效/视为0) | -0(无效/视为0) | -2^{n-1}(有效负数) |
补码中,-0的编码被重新利用来表示多一个负数:
4位时的对比:
| 十进制 | 原码 | 反码 | 补码 |
|---|---|---|---|
| -8 | 无法表示 | 无法表示 | 1000 |
| -7 | 1111 | 1000 | 1001 |
| -6 | 1110 | 1001 | 1010 |
| -5 | 1101 | 1010 | 1011 |
| -4 | 1100 | 1011 | 1100 |
| -3 | 1011 | 1100 | 1101 |
| -2 | 1010 | 1101 | 1110 |
| -1 | 1001 | 1110 | 1111 |
| -0 | 1000 | 1111 | 无 |
| +0 | 0000 | 0000 | 0000 |
补码"偷"了-0的编码1000来表示-8,所以负数范围多一个。
| 二进制编码 | 补码真值 | 移码真值 | 移码编码值 |
|---|---|---|---|
| 0000 | 0 | -8 | 0 |
| 0001 | 1 | -7 | 1 |
| 0010 | 2 | -6 | 2 |
| 0011 | 3 | -5 | 3 |
| 0100 | 4 | -4 | 4 |
| 0101 | 5 | -3 | 5 |
| 0110 | 6 | -2 | 6 |
| 0111 | 7 | -1 | 7 |
| 1000 | -8 | 0 | 8 |
| 1001 | -7 | 1 | 9 |
| 1010 | -6 | 2 | 10 |
| 1011 | -5 | 3 | 11 |
| 1100 | -4 | 4 | 12 |
| 1101 | -3 | 5 | 13 |
| 1110 | -2 | 6 | 14 |
| 1111 | -1 | 7 | 15 |
对于n位二进制:
[
\text{移码} = \text{真值} + 2^{n-1}
]
或
[
\text{移码} = \text{补码} \oplus 100…0 \ (\text{符号位取反})
]
真值 = -5 n=4,偏移量 = 2³ = 8 移码 = -5 + 8 = 3 = 0011 验证: -5的补码 = 1011 符号位取反:1011 → 0011 ✓简化比较运算
浮点数阶码使用
直观性
比较两个数的大小: