注:本节内容为 CS:APP 第三版中文版 P48 的旁注。
原文
术语补码来源于这样一个情况,对于非负数 $x$,我们用 $2^w - x$ (这里只有一个 2) 来计算 $-x$ 的 $w$ 位表示。
问题抽象
原文的问题可以抽象为如下:
已知 $\vec u, \vec v$ 满足:
$$
B2T_w (\vec u) + B2T_w (\vec v) = 0
$$
求证:$\vec u, \vec v \neq \vec 0$ 时,有下式成立:
$$
B2U_w (\vec u) + B2U_w (\vec v) = 2^w
$$
证明:
由补码定义知:
$$
-u_{w-1} 2^{w-1} + \sum _ {i=0} ^ {w-2} u_i 2^i = B2T_w (\vec u)
$$
$$
-v_{w-1} 2^{w-1} + \sum _ {i=0} ^ {w-2} v_i 2^i = B2T_w (\vec v)
$$
将两式相加:
$$
\begin{aligned}
&-u_{w-1} 2^{w-1} + \sum _ {i=0} ^ {w-2} u_i 2^i \\
+&-v_{w-1} 2^{w-1} + \sum _ {i=0} ^ {w-2} v_i 2^i = 0
\end{aligned}
$$
故
$$
\begin{aligned}
&u_{w-1} 2^{w-1} + \sum _ {i=0} ^ {w-2} u_i 2^i + v_{w-1} 2^{w-1} + \sum _ {i=0} ^ {w-2} v_i 2^i \\
=&2(u_{w-1} + v_{w-1}) \cdot 2^{w-1} = (u_{w-1} + v_{w-1}) \cdot 2^w
\end{aligned}
$$
由于非零数的补码的相反数的最高位必定分别为 $0$ 和 $1$,故 $u_{w-1} + v_{w-1} = 1$。可得:
$$
\begin{aligned}
&u_{w-1} 2^{w-1} + \sum _ {i=0} ^ {w-2} u_i 2^i + v_{w-1} 2^{w-1} + \sum _ {i=0} ^ {w-2} v_i 2^i \\
=&B2U_w (\vec u) + B2U_w (\vec v) \\
=&2^w
\end{aligned}
$$
Q.E.D.