补码
概述
补码(two's complement)是计算机中表示有符号整数的标准方法。在 位补码表示中,最高位为符号位(0 表示非负,1 表示负数),能表示的范围是 。补码的核心优势在于:加法和减法可以使用同一套硬件电路,减法转化为加法只需对减数取补码。正数的补码就是其二进制表示;负数 ()的补码为 ,可通过”按位取反加 1”高效计算。
定义
补码表示法(Two's Complement Representation)
在 位补码系统中:
- 正数 ()的补码就是其 位二进制表示
- 负数 ()的补码为 ,等价于对其绝对值的二进制表示”按位取反再加 1”
- 最高位(第 位)为符号位:0 表示非负数,1 表示负数
表示范围: 位补码能表示的整数范围为
例如:8 位补码的范围为 ,32 位补码的范围为 。
补码运算
补码的加法与普通二进制加法完全相同,结果自动保持为补码形式(丢弃溢出位):
- 减法 转化为加法 ,其中 的补码通过对 按位取反再加 1 得到
- 溢出检测:当两个同符号数相加得到异符号结果时发生溢出
核心性质
| 性质 | 描述 | 说明 |
|---|---|---|
| 表示范围 | 位补码能表示 个不同整数 | |
| 零的唯一表示 | 和 的补码相同 | 不同于原码和反码 |
| 符号位 | 最高位:0 为非负,1 为负 | 与无符号数共用位模式 |
| 加减法统一 | 减法转化为加法 | 对减数取补码后相加 |
| 取补操作 | 按位取反再加 1 | 等价于计算 |
| 溢出规则 | 同号相加得异号则溢出 | 需要额外的溢出检测逻辑 |
| 非对称范围 | 负数比正数多一个 | 有表示但 没有 |
关系网络
graph TB A["补码"] --> B["进制表示"] A --> C["二进制"] A --> D["函数"] A --> E["补码表示法"] A --> F["补码运算"] A --> G["与模运算的联系"] E --> E1["n位范围: [-2^(n-1), 2^(n-1)-1]"] E --> E2["符号位: 最高位"] E --> E3["负数: 按位取反 + 1"] F --> F1["加减法统一"] F --> F2["溢出检测"] G --> G1["补码 ≡ 模 2^n 运算"] G --> G2["-x 的补码 = 2^n - x"] B --> B1["二进制表示的扩展"] C --> C1["有符号整数的二进制编码"] style A fill:#5cb85c,color:#fff style B fill:#4a90d9,color:#fff style C fill:#d9534f,color:#fff style E fill:#e8a838,color:#fff
章节扩展
第4章:数论与密码学
补码是第 4 章 4.2 节的补充内容(教材练习 40-51):
- 4.2 整数表示与算法:二进制表示的扩展——补码和反码表示法
- 4.1 整除与模运算:补码与模运算的深层联系——补码本质上是模 运算
- 4.2 整数运算算法:补码加法与普通二进制加法使用相同的硬件电路
补充
补码的数学本质与历史
补码的数学本质是==模 运算==:在 位系统中,整数 的补码表示就是 的二进制形式。当 时,;当 时,,这正是补码的定义。这一洞察解释了为什么补码的加减法可以统一处理:模运算天然支持”减法变加法”。补码表示由 John von Neumann 在 1945 年的 EDVAC 设计报告中首次系统提出,此后成为几乎所有现代计算机的标准整数表示方法。与原码(sign-magnitude)和反码(ones’ complement)相比,补码的唯一零表示和统一的加减法运算使其成为最优选择。
学术来源:Rosen, K. H. (2019). Discrete Mathematics and Its Applications (8th ed.). McGraw-Hill, Section 4.2, Exercises 40-51.
参考链接:Patterson, D. A., & Hennessy, J. L. (2021). Computer Organization and Design: The Hardware/Software Interface (6th ed.). Morgan Kaufmann, Chapter 3.