运算符的优先级和结合性
优 先 级 | 运 算 符 | 含 义 | 运算对象个数 | 结合方向 |
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位只比赋值运算符和“,”高,需要注意的是赋值运算符很多 |
逗号运算级最低 | 逗号运算符优先级最低 |