1.3 KiB

2.65

每一次操作,将 w 位的整数 x 从中间分成两个 \frac{w}{2} 位的整数 y 和 $z$,接着令 x = y ^ z。进行 5 次操作后即得到答案。

我们将这样的思路称为“折半递归法”。

2.66

k 次操作,令 x = x | (x >> (1 << (k - 1)))。通过 5 次操作即可实现提示中的转换。

2.75

x,y 是补码数,$x'=T2U_w(x),y'=T2U_w(y)$。


\begin{aligned}
x'\cdot y'&=(x+x_{w-1}\cdot 2^w)\times(y+y_{w-1}\cdot 2^w)\\
&=x\cdot y+(x_{w-1}\cdot y+y_{w-1}\cdot x)2^w+x_{w-1}\cdot y_{w-1}\cdot 2^{2w}
\end{aligned}$$

进一步,令 `a = signed_high_prod(x, y), b = unsigned_high_prod(x', y')`,有 
$$b\cdot 2^w+x'*^u_w y'=a\cdot 2^w+T2U_w(x*^t_wy)+(x_{w-1}\cdot y+y_{w-1}\cdot x)2^w+x_{w-1}\cdot y_{w-1}\cdot 2^{2w}$$

化简得
$$b=a+x_{w-1}\cdot y+y_{w-1}\cdot x+x_{w-1}\cdot y_{w-1}\cdot 2^w$$

即
$$\begin{aligned}
b&=(a+x_{w-1}\cdot y+y_{w-1}\cdot x)\bmod 2^w\\
&=T2U_w(a)+^u_t x_{w-1}\cdot y'+^u_t y_{w-1}\cdot x'
\end{aligned}$$

## 2.80

\texttt{threefourths(x)}=\left{\begin{aligned} &3\cdot\lfloor x/4\rfloor+x\bmod 3-[x\bmod 3\neq0], &x\ge0\ &3\cdot\lfloor x/4\rfloor+x\bmod 3, &x<0 \end{aligned}\right.



## 2.97
在某些情况下,舍入会导致最高位提高一位。对于这种情况,我们要将舍入时的最低有效位相应提高一位。