以下是 C 语言中操作符的优先级表,从高到低排列,包括结合性(左结合或右结合)。请注意,括号 ()
可以用来强制改变优先级。
C 操作符优先级表
优先级 | 操作符 | 描述 | 结合性 |
---|---|---|---|
1 | () [] -> . | 函数调用、数组下标、结构体成员访问 | 左结合 |
2 | ++ -- (后缀) | 后缀递增/递减 | 左结合 |
3 | ++ -- + - ! ~ * (解引用) & | 前缀递增/递减、一元加减、逻辑非、按位取反、解引用、取地址 | 右结合 |
4 | (type) | 强制类型转换 | 右结合 |
5 | * / % | 乘法、除法、取模 | 左结合 |
6 | + - | 加法、减法 | 左结合 |
7 | << >> | 位移操作符(左移、右移) | 左结合 |
8 | < <= > >= | 关系运算符(小于、小于等于、大于、大于等于) | 左结合 |
9 | == != | 等于、不等 | 左结合 |
10 | & | 按位与 | 左结合 |
11 | ^ | 按位异或 | 左结合 |
12 | ` | ` | 按位或 |
13 | && | 逻辑与 | 左结合 |
14 | ` | ` | |
15 | ?: | 条件(三元)运算符 | 右结合 |
16 | = += -= *= /= %= <<= >>= &= ^= ` | =` | 赋值及复合赋值运算符 |
17 | , | 逗号运算符 | 左结合 |
解释与用法
-
结合性:
- 左结合:从左到右依次计算。例如,
a - b + c
解析为(a - b) + c
。 - 右结合:从右到左依次计算。例如,
a = b = c
解析为a = (b = c)
。
- 左结合:从左到右依次计算。例如,
-
一元与二元:
- 一元操作符(如
*
解引用、&
取地址、+
、-
等)优先级较高。 - 二元操作符(如加法、乘法)优先级较低。
- 一元操作符(如
-
逻辑和按位操作:
- 逻辑运算符
&&
、||
的优先级低于按位运算符(如&
、|
)。 - 注意区分逻辑与
&&
和按位与&
的用途。
- 逻辑运算符
-
赋值操作符:
赋值和复合赋值(如+=
)的优先级低,通常最后计算。 -
特殊符号:
?:
条件运算符优先级较低,仅高于赋值操作符。- 逗号运算符优先级最低,用于在一条语句中计算多个表达式,返回最后一个表达式的值。
示例
#include <stdio.h>
int main() {
int a = 10, b = 20, c = 30;
int result;
// 优先级:* > + > =
result = a + b * c; // 相当于 a + (b * c)
printf("result = %d\n", result); // 输出 610
// 优先级:() > ?: > =
result = (a > b) ? a : b; // 条件运算符,返回 b
printf("result = %d\n", result); // 输出 20
// 优先级:= (右结合)
a = b = c = 40; // 相当于 a = (b = (c = 40))
printf("a = %d, b = %d, c = %d\n", a, b, c); // 输出 40, 40, 40
return 0;
}