| 优先级 | 运算符 | 说明 |
|---|---|---|
| 1(最高) | () [] . -> :: | 括号、数组下标、成员访问、指针/作用域访问 |
| 2 | ! ~ +x -x ++ -- (类型) | 一元运算、取反、自增自减、强制类型转换 |
| 3 | * / % | 乘、除、取模 |
| 4 | + - | 加、减 |
| 5 | << >> >>> | 移位运算 |
| 6 | < <= > >= instanceof | 关系比较(instanceof 仅 Java) |
| 7 | == != | 相等比较 |
| 8 | & | 按位与 |
| 9 | ^ | 按位异或 |
| 10 | | | 按位或 |
| 11 | && | 逻辑与 |
| 12 | || | 逻辑或 |
| 13 | ?: | 三目条件运算 |
| 14(最低) | = += -= *= /= %= ... | 赋值及复合赋值 |
| 优先级 | 运算符 | 说明 |
|---|---|---|
| 1(最高) | ( ) [] | 括号、数组下标 |
| 2 | ++ -- ! | 自增自减、逻辑非 |
| 3 | ** | 幂运算 |
| 4 | * / % | 乘、除、取模 |
| 5 | + - | 加、减 |
| 6 | << >> | 移位运算 |
| 7 | < <= > >= | 关系比较 |
| 8 | == != === !== | 相等(含严格相等) |
| 9 | & | 按位与 |
| 10 | ^ | 按位异或 |
| 11 | | | 按位或 |
| 12 | && | 逻辑与 |
| 13 | || | 逻辑或 |
| 14 | ?: | 三目条件运算 |
| 15(最低) | = += -= *= /= %= ... | 赋值及复合赋值 |
| 优先级 | 运算符 | 说明 |
|---|---|---|
| 1(最高) | ( ) [ ] 属性访问 | 括号、下标、属性访问 |
| 2 | ** | 幂运算 |
| 3 | +x -x ~x | 一元正负、按位取反 |
| 4 | * / // % | 乘、除、整除、取模 |
| 5 | + - | 加、减 |
| 6 | << >> | 移位运算 |
| 7 | & | 按位与 |
| 8 | ^ | 按位异或 |
| 9 | | | 按位或 |
| 10 | == != < <= > >= is in | 比较、身份、成员判断 |
| 11 | not | 逻辑非 |
| 12 | and | 逻辑与 |
| 13 | or | 逻辑或 |
| 14 | x if c else y | 条件表达式 |
| 15(最低) | = += -= *= /= ... | 赋值及复合赋值 |
运算符优先级决定表达式中多个运算符的计算先后顺序,优先级高的先执行,优先级相同的则按结合性(左结合或右结合)依次运算。
▪ 三大类语言的优先级整体结构相近:括号最高、算术居中、赋值最低;但细节存在差异,如 Python 的 ** 高于一元运算符。
▪ 逻辑与 and/&& 通常高于逻辑或 or/||,因此在判断中出现混合逻辑时常会得到不同的求值顺序。
▪ 建议编写复杂表达式时使用括号显式标明优先级,既能避免歧义,也提升代码可读性与可维护性。