运算符一览表中,运算符越靠上,优先级越高。
假如用O表示需要两个操作数的双目运算符,那么对于表达式aObOc:
左结合运算符会将表达式解释为 (aOb)Oc 【左结合性】
右结合运算符会将表达式解释为 aO(bOc) 【右结合性】
总结:遇到优先级相同的运算符时,结合性指明了表达式应从左往右运算还是从右往左运算。
优先级 | 运算符 | 形式 | 名称 | 结合性 |
---|---|---|---|---|
1 | () | x(y) | 函数调用运算符 | 左 |
1 | [] | X[y] | 下标运算符 | 左 |
1 | . | x.y | .运算符(句点运算符) | 左 |
1 | -> | x->y | ->运算符(箭头运算符) | 左 |
1 | ++ | x++ | 后置递增运算符 | 左 |
1 | -- | y-- | 后置递减运算符 | 左 |
2 | ++ | ++x | 前置递增运算符 | 右 |
2 | -- | --y | 前置递减运算符 | 右 |
2 | sizeof | sizeof x | sizeof运算符 | 右 |
2 | & | &x | 单目运算符&(取址运算符) | 右 |
2 | * | *x | 单目运算符*(指针运算符) | 右 |
2 | + | +x | 单目运算符+ | 右 |
2 | - | -x | 单目运算符- | 右 |
2 | ~ | ~x | ~运算符(按位求补运算符) | 右 |
3 | ! | !x | 逻辑非运算符 | 右 |
3 | () | (x)y | 类型转换运算符 | 右 |
4 | * | x * y | 双目运算符* | 左 |
4 | / | x / y | /运算符 | 左 |
4 | % | x % y | %运算符 | 左 |
5 | + | x + y | 双目运算符+ | 左 |
5 | - | x - y | 双目运算符- | 左 |
6 | << | x << y | <<运算符 | 左 |
6 | >> | x >> y | >>运算符 | 左 |
7 | < | x < y | <运算符 | 左 |
7 | <= | x <= y | <=运算符 | 左 |
7 | > | x > y | >运算符 | 左 |
7 | >= | x >= y | >=运算符 | 左 |
8 | == | x == y | ==运算符 | 左 |
8 | != | x != y | !=运算符 | 左 |
9 | & | x & y | 按位与运算符 | 左 |
10 | ^ | x ^ y | 按位异或运算符 | 左 |
11 | | | x | y | 按位或运算符 | 左 |
12 | && | x && y | 逻辑与运算符 | 左 |
13 | || | x || y | 逻辑或运算符 | 左 |
14 | ? : | x ? y : z | 条件运算符 | 右 |
15 | = | x = y | 基本赋值运算符 | 右 |
15 | += -= *= /= <<= >>= &= ^= |= | 复合赋值运算符 | 右 | |
16 | , | x , y | 逗号运算符 | 左 |