优先级 | 名称 | 符号 | 结合性 |
---|---|---|---|
1 | 数组取下标 | [] | 左结合 |
1 | 函数调用 | () | 左结合 |
1 | 取结构和联合的成员 | . -> | 左结合 |
1 | 自增(后缀) | ++ | 左结合 |
1 | 自减(后缀) | -- | 左结合 |
2 | 自增(前缀) | ++ | 右结合 |
2 | 自减(前缀) | -- | 右结合 |
2 | 取地址 | & | 右结合 |
2 | 间接寻址 | * | 右结合 |
2 | 一元正号 | + | 右结合 |
2 | 一元负号 | - | 右结合 |
2 | 按位取反 | ~ | 右结合 |
2 | 逻辑非 | ! | 右结合 |
2 | 计算所占空间(字节数) | sizeof | 右结合 |
3 | 强制类型转换 | () | 右结合 |
4 | 乘法类运算符 | * / % | 左结合 |
5 | 加法类运算符 | + - | 左结合 |
6 | 移位 | << >> | 左结合 |
7 | 关系 | < > <= >= | 左结合 |
8 | 判等 | == != | 左结合 |
9 | 按位与 | & | 左结合 |
10 | 按位异或 | ^ | 左结合 |
11 | 按位或 | | | 左结合 |
12 | 逻辑与 | && | 左结合 |
13 | 逻辑或 | || | 左结合 |
14 | 条件 | ?: | 右结合 |
15 | 赋值 | = *= /= %= += -= <<= >>= &= ^= |= | 右结合 |
16 | 逗号 | , | 左结合 |
说明:
- 左结合性表示运算符右边的先执行,从右到左结合。例如
a = b = c;
等价于`- 运算符优先级相同时,运算次序由运算符的结合性确定;
- 同等优先级的运算符,运算次序依据就近原则,离运算对象更近的优先计算。例如
*p++;
等价于*(p++);
,而*++p;
等价于*(++p);
,++*p;
等价于++(*p);
。
a) 结合关系:
- 一般自左向右;
- 单目(
单目+
、单目-
)和赋值运算符自右向左。
b) C语言没有幂次运算符^
。