CS:APP datalab 参考解答

https://csapp.cs.cmu.edu/3e/datalab-handout.tar

isTmax

TmaxTmax 的位表示为 [011...1]\verb|[011...1]|。注意到 x + 1 == ~x\verb|x + 1 == ~x| 当且仅当 x=1x=-1TmaxTmax。类似的,判断 x + x + 2 == 0\verb|x + x + 2 == 0| 看似也可行,但实际上编译器将这条式子优化成了 x == -1\verb|x == -1|

allOddBitslogicalNeg

使用 作业 2.65 中提到的“折半递归法”。

conditional

设计函数 f(x) = ~!x + 1\verb|f(x) = ~!x + 1|:当 x=0x=0f(x) = 0xFFFFFFFF\verb|f(x) = 0xFFFFFFFF|,而 x0x\neq 0f(x) = 0x00000000\verb|f(x) = 0x00000000|

isLessOrEqual

先判断 x,yx,y 是否异号,若异号则直接得到结果;接着判断 yxy-x,即 y + ~x + 1\verb|y + ~x + 1| 的符号位,当 x,yx,y 同号时不会溢出。

howManyBits

为了仅考虑 xx 为正数的情况,令 x ^= x >> 31\verb|x ^= x >> 31|。接下来可通过“折半递归法”解决。

代码参见 https://git.gzezfisher.top/FISHER_/CSAPP-sol/src/branch/main/labs/datalab

CS:APP datalab 参考解答

https://gzezfisher.top/csapp-datalab/

作者

Fisher Cai

发布于

2025-07-22

更新于

2025-08-03

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×