考试被运算符优先级爆杀了
| 优先级 | 运算符 | 名称及含义 |
| 1 | [] | 数组下标 |
| () | 圆括号 | |
| . | 成员选择(对象) | |
| -> | 成员选择(指针) | |
| 2 | - | 负号运算符 -表达式 |
| (类型) | 强制类型转换 | |
| ++ | 自加加 | |
| -- | 自减减 | |
| * | 取值运算符 | |
| & | 取地址运算符 | |
| ! | 逻辑非运算符 | |
| ~ | 按位取反运算符 | |
| sizeof | 长度运算符 | |
| 3 | / | 除 |
| * | 乘 | |
| % | 取余 | |
| 4 | + | 加法 |
| - | 减法 | |
| 5 | << | 左移 |
| >> | 右移 | |
| 6 | > | 大于 |
| >= | 大于等于 | |
| < | 小于 | |
| <= | 小于等于 | |
| 7 | == | 等等 用于判断 |
| != | 不等于 | |
| 8 | & | 按位与 |
| 9 | ^ | 按位异或 |
| 10 | | | 按位或 |
| 11 | && | 逻辑与 |
| 12 | || | 逻辑或 |
| 13 | ? : | 条件运算符 |
| 14 | = | 赋值运算符 |
| /= | 除后赋值 | |
| *= | 乘后赋值 | |
| %= | 取模后赋值 | |
| += | 加后赋值 | |
| -= | 减后赋值 | |
| <<= | 左移后赋值 | |
| >>= | 右移后赋值 | |
| &= | 按位与后赋值 | |
| |= | 按位或后赋值 | |
| 15 | , | 逗号运算符 |
有几种优先级相同的运算符容易错误的点
| . 的优先级高于 *(-> 操作符用于消除这个问题) | *p.f | 对 p 取 f 偏移,作为指针,然后进行解除引用操作,等价于 *(p.f) |
| [] 高于 * | int* ap[] | ap 是个元素为 int 指针的数组,等价于 int*(ap[]) |
| 函数 () 高于 * | int* fp() | fp 是个函数,返回 int*,等价于 int* (fp()) |
| ==和!= 高于位操作 | (a & b != 0) | a & (b!=0) |
| ==和!=高于赋值符 | a = b!=c | a = (b!=c) |
| 算术运算符高于位移 运算符 | a << b + 4 | a << (b+4) |
| 逗号运算符在所有运 算符中优先级最低 | i = 1, 2 | (i = 1), 2 |



