分享到plurk 分享到twitter 分享到facebook

版本 8a6841baf05b2ddc6589570883aa69e3a72ef52b

User/D4nnyLee

Changes from 8a6841baf05b2ddc6589570883aa69e3a72ef52b to e402e5509807774ce09a80485a8fe510abb2804e

# 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 得到的結果為 127,這是 signed integer underflow 所造成的結果,所以 x - y < 0 會得到 false 。
* x < y 就只是單純比較 x 和 y 的大小,而顯而易見的 -128 < 1 ,因此 x < y 會得到 true 。

由上述反例可以知道 x - y < 0 和 x < y 可能會得到不同的結果,因此不可以將兩個敘述劃上等號。
由這個反例可以知道 x - y < 0 和 x < y 可能會得到不同的結果,因此不可以將兩個敘述劃上等號。

## 心得