在平时写代码时,经常会用到操作符,但是如果不了解这些操作符的优先级,可能会让程序的执行效果和我们预期的不一样。
例如:
int a = 2;
int b = 3;
int c = 4;
//int ret = a + b * c;//我们想要执行的顺序是a+b的值再乘c
//如果了解操作符优先级,即可避免
int ret =(a + b) * c;
C语言中的操作符优先级是指在一个表达式中,哪些操作符会被先执行。
下面是整理的C语言操作符的优先级表格,按照从高到低的顺序排列:
优先级 | 运算符 | 作用 |
---|---|---|
1 | () | 圆括号用于改变运算符的优先级,括号中的表达式先被求值 |
2 | [] | 方括号用于访问数组中的元素,也可以用于指针变量的偏移量 |
3 | -> | 结构体指针访问运算符,用于访问结构体指针所指向的结构体中的成员 |
4 | ++ -- | 自增、自减运算符,用于将变量的值加一或减一 |
5 | ! ~ - + | 逻辑非、按位取反、负号、正号等运算符 |
6 | * / % | 乘、除、取模 |
7 | + - | 加、减 |
8 | << >> | 左移、右移 |
9 | < <= > >= | 小于、小于等于、大于、大于等于 |
10 | == != | 等于、不等于 |
11 | & | 按位与 |
12 | ^ | 按位异或 |
13 | || | 按位或 |
14 | && | 逻辑与 |
15 | | | 逻辑或 |
16 | ?: | 三元运算符 |
17 | = | 赋值运算符 |
18 | += -= *= /= %= &= ^= = <<= >>= | 复合赋值运算符 |
19 | , | 逗号运算符,用于连接多个表达式 |
tips:
如果是同级的操作符,执行顺序从左至右
如果不确定优先级,可以使用括号来明确运算的优先级
C语言中还有一些特殊的运算符,如:
sizeof
运算符:用于计算数据类型或变量的大小,没有优先级;&
运算符:取地址运算符,用于获取变量的地址,优先级较低;*
运算符:间接访问运算符,用于访问指针所指向的内存地址中存储的值,优先级较低;->*
运算符:结构体指针成员访问运算符,优先级较低;.
运算符:结构体成员访问运算符,优先级较低。
这些操作符的优先级相对较低,使用频率也比较低,但也需要了解。