C语言中的运算符和结合性问题
胖大斯 人气:0C语言运算符和结合性
优先级 | 运算符 | 含义 | 要求运算对象的个数 | 结合方向 |
---|---|---|---|---|
1 | () | 圆括号 | 自左至右 | |
1 | [] | 下标运算符 | 自左至右 | |
1 | -> | 指向结构体成员运算符 | 自左至右 | |
1 | · | 结构体成员运算符 | 自左至右 | |
2 | ! | 逻辑非运算符 | 1(单目运算符) | 自右至左 |
2 | ~ | 按位取反运算符 | 1(单目运算符) | 自右至左 |
2 | ++ | 自增运算符 | 1(单目运算符) | 自右至左 |
2 | -- | 自减运算符 | 1(单目运算符) | 自右至左 |
2 | - | 负号运算符 | 1(单目运算符) | 自右至左 |
2 | (类型) | 类型转换运算符 | 1(单目运算符) | 自右至左 |
2 | * | 指针运算符 | 1(单目运算符) | 自右至左 |
2 | & | 取地址运算符 | 1(单目运算符) | 自右至左 |
2 | sizeof | 长度运算符 | 1(单目运算符) | 自右至左 |
3 | * | 乘法运算符 | 2(双目运算符) | 自左至右 |
3 | / | 除法运算符 | 2(双目运算符) | 自左至右 |
3 | % | 求余运算符 | 2(双目运算符) | 自左至右 |
4 | + | 加法运算符 | 2(双目运算符) | 自左至右 |
4 | - | 减法运算符 | 2(双目运算符) | 自左至右 |
5 | << | 左移运算符 | 2(双目运算符) | 自左至右 |
5 | >> | 左移运算符 | 2(双目运算符) | 自左至右 |
6 | < <= > >= | 关系运算符 | 2(双目运算符) | 自左至右 |
7 | == | 等于运算符 | 2(双目运算符) | 自左至右 |
7 | != | 不等于运算符 | 2(双目运算符) | 自左至右 |
8 | & | 按位与运算符 | 2(双目运算符) | 自左至右 |
9 | ^ | 按位异或运算符 | 2(双目运算符) | 自左至右 |
10 | | | 按位或运算符 | 2(双目运算符) | 自左至右 |
11 | && | 逻辑与运算符 | 2(双目运算符) | 自左至右 |
12 | || | 逻辑或运算符 | 2(双目运算符) | 自左至右 |
13 | ? : | 条件运算符 | 3(三目运算符) | 自右至左 |
14 | = += -= *= /= %= >>= <<= &= ^= |= | 赋值运算符 | 2(二目运算符) | 自右至左 |
15 | , | 逗号运算符(顺序求值运算符) | 自左至右 |
同一优先级的运算符,运算次序由结合方向决定。
-
和++
为同一优先级,结合方向为自右至左,因此-i++
相当于-(i++)
;
不同的运算符要求有不同的运算对象个数,如+
和-
为双目运算符,要求在运算符两侧各有一个运算对象(3+5
)。
而++
和-
(负号)运算符是单目运算符,只能在运算符的一侧出现一个运算对象(如-a
、i++
、--i
、(float)i
、sizeof(int)
、*p
等)。
条件运算符是C语言中唯一的三木运算符,如x?a:b
。
从上表中可以大致归纳出各类运算符的优先级
以上的优先级别由上到下递减。初等运算符优先级最高,逗号运算符优先级最低。
位运算符的优先级比较分散(有的在算术运算符之前(如~
),有的在关系运算符之前(如<<
和>>
),有的在关系运算符之后(如&
、^
、|
))。
为了容易记忆,使用位运算符时可加圆括号。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
加载全部内容