| 運算子 | 名稱 | 規則 | 典型用途 |
|---|---|---|---|
& | 位元 AND | 同為 1 結果 1 | 清零特定位、檢測位狀態、保留特定位 |
| | 位元 OR | 任一為 1 結果 1 | 設定特定位為 1、合併旗標 |
^ | 位元 XOR | 相異為 1 | 翻轉特定位、交換變數、簡單加密 |
~ | 位元 NOT (補數) | 0↔1 | 產生遮罩、翻轉所有位 |
x & 0 = 0 (清零)x & 1 = x (保留)x | 0 = x (保留)x | 1 = 1 (設 1)所有位元操作皆可轉化為「決定遮罩 → 選擇 & 或 | → 執行」。
(x >> k) & 1 或 (x & (1 << k)) != 0x |= (1 << k)x &= ~(1 << k)x ^= (1 << k)x &= (x - 1) (判斷 2 的冪次:x & (x-1) == 0)x & (-x) (二補數特性)x << n:左移 n 位,低位補 0,等同 x * 2^n (無溢位前提)。x >> n:右移 n 位。
int countOnes(unsigned int x) {
int cnt = 0;
while (x) {
x &= (x - 1); // 每次清除最低位的 1
++cnt;
}
return cnt; // Brian Kernighan 演算法,O(1 的個數)
}
REG |= (1 << BIT_ENABLE)、REG &= ~(1 << BIT_IRQ)uint32_t flags; #define FLAG_A 0x1。RGB565 = (R<<11) | (G<<5) | B。32 於 32-bit) 行為未定義。if ((x & MASK) == 0)。