注:本节内容为 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.

最后修改:2022 年 02 月 13 日 08 : 55 PM
真的不买杯奶茶嘛....qwq