| 類別 | 運算符 | 說明 |
|---|---|---|
| 算術 | + - * / % ++ -- | 數值運算 |
| 關系 | > < == >= <= != | 比較運算 |
| 邏輯 | && || ! | 布林邏輯 |
| 位操作 | & | ^ ~ << >> | 位元級運算 |
| 賦值 | = += -= *= /= %= &= |= ^= <<= >>= | 11 種複合賦值 |
| 條件 | ?: | 三元運算符 |
| 逗號 | , | 順序求值 |
| 指標 | * & | 解引用/取址 |
| sizeof | sizeof | 類型/運算元大小 |
| 特殊 | () [] -> . | 函數調用/下標/成員存取 |
| 優先級 | 運算符 | 結合性 | 說明 |
|---|---|---|---|
| 1 | () [] -> . | 左→右 | 主要運算符 |
| 2 | ! ~ ++ -- + - * & sizeof (type) | 右→左 | 一元運算符 |
| 3 | * / % | 左→右 | 乘除模 |
| 4 | + - | 左→右 | 加減 |
| 5 | << >> | 左→右 | 移位 |
| 6 | < <= > >= | 左→右 | 關系 |
| 7 | == != | 左→右 | 相等性 |
| 8 | & | 左→右 | 位與 |
| 9 | ^ | 左→右 | 位異或 |
| 10 | | | 左→右 | 位或 |
| 11 | && | 左→右 | 邏輯與 |
| 12 | || | 左→右 | 邏輯或 |
| 13 | ?: | 右→左 | 條件 |
| 14 | = += -= ... | 右→左 | 賦值 |
| 15 | , | 左→右 | 逗號 |
// 設置第 n 位
x |= (1 << n);
// 清除第 n 位
x &= ~(1 << n);
// 翻轉第 n 位
x ^= (1 << n);
// 檢查第 n 位
if (x & (1 << n)) ...
// 取低 n 位
x & ((1 << n) - 1)
// 乘以 2^n
x << n
// 除以 2^n(無號/正數)
x >> n
注意:有號數右移為實現定義(算術右移保留符號位 / 邏輯右移補 0),跨平台請用無號數。
int a = 1, b = 2, c = 3;
int x = a > b ? a : b > c ? b : c; // 等價 a>b ? a : (b>c ? b : c)
func(a, b, c); // 3 個參數
func((a, b), c); // 2 個參數,(a,b) 求值為 b
int i = 0;
sizeof(i++); // i 仍為 0
if (p != NULL && p->val > 0) ... // 安全:p 為 NULL 時不解引用
if (p->val > 0 || p == NULL) ... // 危險:可能先求 p->val
C 運算符豐富強大,但優先級與結合性規則複雜。掌握核心表格、理解結合性方向、警惕副作用與未定義行為,是寫出正確、可維護 C 代碼的基礎。