运算符的优先级和结合性
| 优 先 级 | 运 算 符 | 含 义 | 运算对象个数 | 结合方向 |
| 1 | () | 圆括号 |
| 自左向右 |
| [] | 下标运算符 | |||
| −> | 指向结构体成员运算符 | |||
| . | 结构体成员运算符 | |||
| 2 | ! | 逻辑非运算 | 1(单目) | 自右向左 |
| ~ | 按位取反运算 | |||
| ++ | 自增运算符 | |||
| − − | 自减运算符 | |||
| − | 负号运算符 | |||
| (类型) | 类型转换运算符 | |||
| * | 指针运算符 | |||
| & | 地址运算符 | |||
| sizeof | 长度运算符 |
续表
| 优 先 级 | 运 算 符 | 含 义 | 运算对象个数 | 结合方向 |
| 3 | * | 乘法运算符 | 2(双目) | 自左向右 |
| / | 除法运算符 | |||
| % | 求余运算符 | |||
| 4 | + | 加法运算符 减法运算符 | 2(双目) | 自左向右 |
| − | ||||
| 5 | << | 左移运算符 | 2(双目) | 自左向右 |
| >> | 右移运算符 | |||
| 6 | < | 关系运算符 | 2(双目) | 自左向右 |
| <= | ||||
| > | ||||
| >= | ||||
| 7 | = = | 等于运算符 不等于运算符 | 2(双目) | 自左向右 |
| != | ||||
| 8 | & | 按位与运算符 | 2(双目) | 自左向右 |
| 9 | ^ | 按位异或运算符 | 2(双目) | 自左向右 |
| 10 | | | 按位或运算符 | 2(双目) | 自左向右 |
| 11 | && | 逻辑与运算符 | 2(双目) | 自左向右 |
| 12 | || | 逻辑或运算符 | 2(双目) | 自左向右 |
| 13 | ?: | 条件运算符 | 3(三目) | 自右向左 |
| 14 | = += −= *= /= %= >>= <<= &= ^= |= | 赋值运算符 | 2(双目) | 自右向左 |
| 15 | , | 逗号运算符 |
| 自左向右 |
这些运算符的优先级看起来比较凌乱,表4-10所示为一个简单易记的口诀,可以帮助记忆。
表4-10 运算符的优先级口诀
| 口 诀 | 含 义 |
| 括号成员第一 | 括号运算符[]、()成员运算符.、−> |
| 全体单目第二 | 所有的单目运算符,比如++、−−、+(正)、−(负)等 |
| 乘除余三,加减四 | 这个“余”是指取余运算即% |
| 移位五,关系六 | 移位运算符:<<、>>,关系:>、<、>=、<=等 |
| 等于(与)不等排第七 | 即= =、!= |
| 位与异或和位或“三分天下”八九十 | 这几个都是位运算:位与(&)异或(^)位或(|) |
| 逻辑或跟与 十二和十一 | 逻辑运算符:||和&& 注意顺序:优先级(||)低于优先级(&&) |
续表
| 口 诀 | 含 义 |
| 条件高于赋值 | 三目运算符优先级排到14位只比赋值运算符和“,”高,需要注意的是赋值运算符很多 |
| 逗号运算级最低 | 逗号运算符优先级最低 |