首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

CSAPP 2.15 習題解析:僅用位運算實現整數相等判斷

     編輯:關於C語言

CSAPP 2.15 習題解析

題目要求:僅使用位級運算和邏輯運算,編寫 C 表達式實現 x == y。相等返回 1,否則返回 0。不得使用條件判斷、比較運算符等。

解題關鍵:異或運算性質

x ^ y 的結果中:

  • 若對應位相同 → 結果位為 0。
  • 若對應位不同 → 結果位為 1。

因此,x == y 等價於 (x ^ y) == 0,即 x ^ y 的所有位均為 0。

表達式構造

!(x ^ y)

原理解析

  1. x ^ y:異或運算。若 x=y,結果為 0(全 0);否則結果非 0(至少有一位為 1)。
  2. !:邏輯非運算。在 C 語言中,!0 == 1,!非0 == 0。
  3. 組合:!(x ^ y) 在 x=y 時為 !0 = 1;在 x≠y 時為 !非0 = 0。完美滿足要求。

驗證示例

xyx ^ y!(x ^ y)
5 (0101)5 (0101)0 (0000)1
5 (0101)3 (0011)6 (0110)0
-1 (全1)-1 (全1)01

補充:擴展到指針比較

同理,判斷兩指針 p == q 可用 !( (uintptr_t)p ^ (uintptr_t)q ),但需包含 <stdint.h> 並注意指針轉整數的可移植性。

這個技巧常用於底層系統編程中避免分支預測失敗,或在受限指令集環境下實現比較邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved