c操作符优先级
操作符/运算符优先级 | |||||||
优先级 | 操作符 | 描述 | 用法示例 | 目 | 结果类型 | 结合性 | 控制求值顺序 |
1 | ( ) | 聚组 | (expRession) | 与表达式相同 | N/A | 否 | |
1 | ( ) | 函数调用 | Rexp(Rexp,..,Rexp) | Rexp | L-R | 否 | |
1 | [ ] | 下标引用 | Rexp[Rexp] | Lexp | L-R | 否 | |
1 | . | 访问结构成员 | Lexp.memeber | Lexp | L-R | 否 | |
1 | -> | 访问结指针成员 | Rexp->member | Lexp | L-R | 否 | |
2 | ++ | 后缀自增 | Lexp++ | 单目 | Rexp | L-R | 否 |
2 | -- | 后缀自减 | Lexp-- | 单目 | Rexp | L-R | 否 |
2 | ! | 逻辑非 | !Rexp | 单目 | Rexp | R-L | 否 |
2 | ~ | 按位取反 | ~Rexp | 单目 | Rexp | R-L | 否 |
2 | + | 单目,表示正值 | +Rexp | 单目 | Rexp | R-L | 否 |
2 | - | 单目,表示负值 | -Rexp | 单目 | Rexp | R-L | 否 |
2 | ++ | 前缀自增 | ++Lexp | 单目 | Rexp | R-L | 否 |
2 | -- | 前缀自减 | --Lexp | 单目 | Rexp | R-L | 否 |
2 | * | 间接访问 | *Rexp | 单目 | Lexp | R-L | 否 |
2 | & | 取地址 | &Lexp | 单目 | Rexp | R-L | 否 |
2 | sizeof | 求长度 | sizeof(type) sizeof Rexp |
Rexp | R-L | 否 | |
2 | (tpye) | 类型转换 | (type)Rexp | Rexp | R-L | 否 | |
3 | * | 乘法 | Rexp*Rexp | 双目 | Rexp | L-R | 否 |
3 | / | 除法 | Rexp/Rexp | 双目 | Rexp | L-R | 否 |
3 | % | 整数取余 | Rexp%Rexp | 双目 | Rexp | L-R | 否 |
4 | + | 加法 | Rexp+Rexp | 双目 | Rexp | L-R | 否 |
4 | - | 减法 | Rexp-Rexp | 双目 | Rexp | L-R | 否 |
5 | << | 左移位 | Rexp<<Rexp | 双目 | Rexp | L-R | 否 |
5 | >> | 右移位 | Rexp>>Rexp | 双目 | Rexp | L-R | 否 |
6 | > | 大于 | Rexp>Rexp | 双目 | Rexp | L-R | 否 |
6 | >= | 大于等于 | Rexp>=Rexp | 双目 | Rexp | L-R | 否 |
6 | < | 小于 | Rexp>Rexp | 双目 | Rexp | L-R | 否 |
6 | <= | 小于等于 | Rexp<=Rexp | 双目 | Rexp | L-R | 否 |
7 | == | 等于 | Rexp==Rexp | 双目 | Rexp | L-R | 否 |
7 | != | 不等于 | Rexp!=Rexp | 双目 | Rexp | L-R | 否 |
8 | & | 按位与 | Rexp&Rexp | 双目 | Rexp | L-R | 否 |
9 | ^ | 按位异或 | Rexp^Rexp | 双目 | Rexp | L-R | 否 |
10 | | | 按位或 | Rexp|Rexp | 双目 | Rexp | L-R | 否 |
11 | && | 逻辑与 | Rexp&&Rexp | 双目 | Rexp | L-R | 是 |
12 | || | 逻辑或 | Rexp||Rexp | 双目 | Rexp | L-R | 是 |
13 | ?: | 条件操作符 | Rexp?Rexp:Rexp | 三目 | Rexp | N/A | 是 |
14 | = | 赋值 | Lexp=Rexp | Rexp | R-L | 否 | |
14 | += | 加等于 | Lexp+=Rexp | Rexp | R-L | 否 | |
14 | -= | 减等于 | Lexp-=Rexp | Rexp | R-L | 否 | |
14 | *= | 乘等于 | Lexp*=Rexp | Rexp | R-L | 否 | |
14 | /= | 除等于 | Lexp/=Rexp | Rexp | R-L | 否 | |
14 | %= | 取模等于 | Lexp%=Rexp | Rexp | R-L | 否 | |
14 | <<= | 左移等于 | Lexp<<=Rexp | Rexp | R-L | 否 | |
14 | >>= | 右移等于 | Lexp>>=Rexp | Rexp | R-L | 否 | |
14 | &= | 与等于 | Lexp&=Rexp | Rexp | R-L | 否 | |
14 | ^= | 异或等于 | Lexp^=Rexp | Rexp | R-L | 否 | |
14 | |= | 或等于 | Lexp|=Rexp | Rexp | R-L | 否 | |
15 | , | 逗号 | Rexp,Rexp | Rexp | L-R | 是 | |
PS: 非法表达式的求值顺序和优先级与使用的编译器有关,应尽量避免此种表达式出现 |