按位運算符表
| 運算符 | 含義 | 示例 (x=7=0111, y=8=1000) |
| & | 位與 | x&y = 0 |
| | | 位或 | x|y = 15 (1111) |
| ^ | 位異或 | x^y = 15 |
| ~ | 位取反 | ~x = ...11111000 (補碼 -8) |
| >> | 右移 | x>>1 = 3 (0011) |
| << | 左移 | x<<1 = 14 (1110) |
關鍵區別
- 邏輯運算 (`&&`, `||`) 結果只能 0/1;按位運算結果可為任意位模式。
- 例:`x=7, y=8` → `x&&y` 為真(1),`x&y` 為 0。
移位細節
- 左移 `<<`:低位補 0,相當於乘 2ⁿ(無溢出時)。
- 右移 `>>`:無符號數高位補 0;有符號數實現相關(算術移位保符號位,邏輯移位補 0)。
- 移位位數 ≥ 類型寬度屬未定義行為。
應用場景
- 標誌位操作:`flags |= MASK` 置位,`flags &= ~MASK` 清位,`flags ^= MASK` 翻轉,`flags & MASK` 測試。
- 快速乘除 2 的冪次。
- 位域提取:`(val >> shift) & mask`。
- 校驗和、加密、壓縮等底層演算法。
總結
按位運算是系統級編程基石,理解位模式與邏輯值的區別、移位補位規則、優先級(`&` > `^` > `|` > `&&` > `||`),能寫出高效、緊湊的底層代碼。