CSAPP-sol/labs/datalab/README.md

712 B

datalab

isTmax

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

allOddBitslogicalNeg

使用“折半递归法”,参见作业 2.65。

conditional

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

isLessOrEqual

先判断 x,y 是否异号;接着判断 y - x,即 y + ~x + 1 的符号位,当 x,y 同号时不会溢出。

howManyBits

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