“定宽模加法决定算术结果,控制流决定下一条指令地址,两者都属于架构契约。缓存标签、旁路多路器和流水级寄存器是实现状态;程序通常不能把它们直接当 ISA 寄存器读写。”
形式陈述
位串不是带正负号的整数
固定宽度
于是
定义定宽加法为保留普通二进制和的低
直觉
位串相当于有限个格子的标签。无符号与补码是读标签的两把尺子;加法器可以用同一个低位结果,比较器却必须知道使用哪把尺子。八位 11111111 在两种解释下分别是
补码的便利来自
例子与边界
进位不等于有符号溢出
八位下,01111111 + 00000001 = 10000000。无符号计算是 11111111 + 00000001 的完整和为 1 00000000:无符号
两个补码操作数同号、结果异号,恰是加法有符号溢出的判据。异号相加不会超出范围,因为结果位于两数之间。对同号输入,超出正端会跨到最高位为一的区间,超出负端则绕到最高位为零的区间;这也解释了判据,而非仅记忆一个位公式。
不能表示的相反数
八位 10000000 表示 10000000,因为
相同位串,不同排序
比较 11111111 与 00000001:无符号关系是
推论与应用
Word-RAM可以选择模
机器级模运算也不自动决定源语言的溢出语义。要判断一段 C、Rust 或其他语言程序,仍须使用该语言和模式的规则,不能仅凭底层加法器会回绕就替源码作出结论。
参考资料
- UC Berkeley CS61C,Integer Representations,课程笔记,访问于 2026-10-08;用于定宽表示与补码背景。
- Randal E. Bryant and David R. O’Hallaron, Computer Systems: A Programmer’s Perspective, 3rd ed., 2016,§2.2–2.3。本文八位算例与判据推导独立列出,不绑定某种源语言行为。