考试被运算符优先级爆杀了?
运算符优先级
优先级 | 运算符 | 名称及含义 | 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 |
|