題目要求:編寫 C 表達式對變量 x 的最低有效字節 (LSB) 進行操作,代碼需對任意字長 w ≥ 8 工作。參考:x = 0x87654321,w = 32。
0xFF (二進制 0000...11111111) 專門針對最低 8 位(一個字節)。因 C 整數提升規則,0xFF 會自動擴展為 int 類型(符號擴展為 0),高位全 0,低 8 位全 1,完美適配任意字長。
表達式:x & 0xFF
原理:按位與。0xFF 低 8 位為 1 保留原值,高位為 0 強制清零。
示例:0x87654321 & 0xFF = 0x00000021
表達式:~(x ^ 0xFF) 或 (~x) ^ 0xFF
原理推導:
~x 的高位),低位保持 x 原值。x ^ 0xFF:低 8 位翻轉,高位不變。~(x ^ 0xFF):整體取反 → 低 8 位再次翻轉回原值,高位取反。完美達標。~(x ^ 0xFF) = (~x) ^ 0xFF (德摩根律/異或結合性)。示例:x=0x87654321 → ~x=0x789ABCDE → (~x) ^ 0xFF = 0x789ABC21。高位 0x789ABC 為 ~0x876543,低位 0x21 保持。
表達式:x | 0xFF
原理:按位或。0xFF 低 8 位為 1 強制置 1,高位為 0 保留原值。
示例:0x87654321 | 0xFF = 0x876543FF
| 操作目標 | 表達式 | 核心運算 | 掩碼作用 |
|---|---|---|---|
| 保留 LSB,其餘清 0 | x & 0xFF | AND | 低 8 位 1 保留,高位 0 清零 |
| 高位取反,LSB 不變 | ~(x ^ 0xFF) | XOR + NOT | 利用雙重翻轉保護 LSB |
| LSB 置全 1,其餘不變 | x | 0xFF | OR | 低 8 位 1 強制置 1,高位 0 保留 |
0x000000FF,假設 32 位。用 0xFF 利用整數提升自動適配 16/32/64 位。~0xFF 在 16 位機上是 0xFF00,32 位上是 0xFFFFFF00,但本題三個表達式均不直接使用 ~0xFF,避免了字長依賴。