題目要求:僅使用位級運算和邏輯運算,編寫 C 表達式實現 x == y。相等返回 1,否則返回 0。不得使用條件判斷、比較運算符等。
x ^ y 的結果中:
因此,x == y 等價於 (x ^ y) == 0,即 x ^ y 的所有位均為 0。
!(x ^ y)
x ^ y:異或運算。若 x=y,結果為 0(全 0);否則結果非 0(至少有一位為 1)。!:邏輯非運算。在 C 語言中,!0 == 1,!非0 == 0。!(x ^ y) 在 x=y 時為 !0 = 1;在 x≠y 時為 !非0 = 0。完美滿足要求。| x | y | x ^ y | !(x ^ y) |
|---|---|---|---|
| 5 (0101) | 5 (0101) | 0 (0000) | 1 |
| 5 (0101) | 3 (0011) | 6 (0110) | 0 |
| -1 (全1) | -1 (全1) | 0 | 1 |
同理,判斷兩指針 p == q 可用 !( (uintptr_t)p ^ (uintptr_t)q ),但需包含 <stdint.h> 並注意指針轉整數的可移植性。
這個技巧常用於底層系統編程中避免分支預測失敗,或在受限指令集環境下實現比較邏輯。