版本 8a6841baf05b2ddc6589570883aa69e3a72ef52b
User/D4nnyLee
D4nnyLee(李韋杰)
- 成功大學資訊系 111 級
Linux Kernel Internals 2021 春季班
問題選答
a) 知道 x - y < 0 敘述為何不能寫為 x < y 嗎? (CS:APP 第 2 章)
因為這兩個敘述並不會在所有情況下都得到相同的結果。
假設 x, y 的型別都為 int8_t ,則 x, y 能表達的最小值就是 -128 ,因此很容易就能舉出 x = -128, y = 1 這個反例。
- x - y < 0
x - y 得到的結果為 127,這是 signed integer underflow 所造成的結果,所以 x - y < 0 會得到 false 。
- x < y
x < y 就只是單純比較 x 和 y 的大小,而顯而易見的 -128 < 1 ,因此 x < y 會得到 true 。
由上述反例可以知道 x - y < 0 和 x < y 可能會得到不同的結果,因此不可以將兩個敘述劃上等號。