From fa8080fe2c1a34bb9357daf05f9b3a4520e217f9 Mon Sep 17 00:00:00 2001 From: "18218461270@163.com" <18218461270@163.com> Date: Wed, 23 Jul 2025 20:40:31 +0800 Subject: [PATCH] upload datalab --- labs/datalab/README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/labs/datalab/README.md b/labs/datalab/README.md index fe84766..fa29b5d 100644 --- a/labs/datalab/README.md +++ b/labs/datalab/README.md @@ -1,23 +1,31 @@ # datalab ## `bitXor`, `tmin` 略。 + ## `isTmax` $Tmax$ 的位表示为 `011...11`。注意到 `x+1==~x` 当且仅当 $x=-1$ 或 $x=Tmax$。利用该性质,并判断是否为 $-1$。 + ## `allOddBits` 使用“折半递归法”,参见作业 2.65。 + ## `negate`, `isAsciiDigit` 略。 + ## `conditional` -我们希望设计这样一个函数 $f(x)$:当 $x=0$ 时 `f(x)=0x00000000`,而 $x\neq 0$ 时 `f(x)=0xFFFFFFFF`。此时只需令 `conditional(x, y, z) = (y & f(x)) | (z & ~f(x))`。 +设计这样一个函数 $f(x)$:当 $x=0$ 时 `f(x)=0x00000000`,而 $x\neq 0$ 时 `f(x)=0xFFFFFFFF`。此时只需令 `conditional(x, y, z) = (y & f(x)) | (z & ~f(x))`。 一个可行的方案是令 `f(x) = !x - 1`。 + ## `isLessOrEqual` 核心思路是判断 `y - x = y + ~x + 1` 的符号位。需要处理一些细节以规避溢出带来的错误。 + ## `logicalNeg` “折半递归法”。 + ## `howManyBits` 对于正数 $x$,所求为最大的 $b$ 使得 $x$ 的第 $b-2$ 位为 `1`,而对于负数 $x$,则是最大的 $b$ 使得 $x$ 的第 $b-2$ 位为 `0`。通过令 `x = x ^ (x >> 31)`,我们得以仅用考虑 $x$ 为正数的情况。 之后使用“折半递归法”。 + ## `floatScale2`,`floatFloat2Int`,`floatPower2` 略。 \ No newline at end of file