39 lines
1.3 KiB
Markdown
39 lines
1.3 KiB
Markdown
## 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
|
||
在某些情况下,舍入会导致最高位提高一位。对于这种情况,我们要将舍入时的最低有效位相应提高一位。 |