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

CSAPP 習題 2.8 解答:位向量布爾運算真值表完整推導

     編輯:關於C語言

CSAPP 習題 2.8 解答:位向量布爾運算真值表完整推導

CSAPP 2.8 給定兩個 8 位位向量 a = 0110 1001、b = 0101 0101,要求計算 ~a、~b、a&b、a|b、a^b。這是位運算基礎功,也是掩碼提取、標誌位操作的核心技能。

輸入向量

a = 0110 1001  (0x69)
b = 0101 0101  (0x55)

逐位運算結果表

運算二進制結果十六進制十進制逐位邏輯
~a (非)1001 01100x96150逐位取反
~b (非)1010 10100xAA170逐位取反
a & b (與)0100 00010x4165同為 1 才為 1
a | b (或)0111 11010x7D125任一為 1 即為 1
a ^ b (異或)0011 11000x3C60不同為 1,相同為 0

逐位驗證(以 a&b 為例)

位位置:  7 6 5 4 3 2 1 0
a:       0 1 1 0 1 0 0 1
b:       0 1 0 1 0 1 0 1
a&b:     0 1 0 0 0 0 0 1  → 0x41

位運算實戰模式速查

目標表達式示例
置位第 k 位x |= (1u << k)啟用標誌位
清零第 k 位x &= ~(1u << k)禁用標誌位
翻轉第 k 位x ^= (1u << k)切換狀態
檢測第 k 位(x >> k) & 1 或 x & (1u << k)條件判斷
取低 k 位x & ((1u << k) - 1)模 2^k
清零最低 1x & (x - 1)計算 1 的個數
隔離最低 1x & -x低位提取

避坑提醒

  • 移位寬度:1 << k 若 k >= 32 為未定義行為(32 位 int),用 1uLL << k。
  • 符號擴展:右移負數為實現定義(通常算術右移),位運算優先用 unsigned 類型。
  • 優先級:& 低於 ==,寫 if ((x & MASK) == 0) 而非 if (x & MASK == 0)。

熟練掌握 8 位向量的五大基本運算,是寫出高效、無分支、位級精確代碼的基石。

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