本文小编为大家详细介绍“C语言中的运算符和结合性问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中的运算符和结合性问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
C语言运算符和结合性
优先级 | 运算符 | 含义 | 要求运算对象的个数 | 结合方向 |
---|---|---|---|---|
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。
从上表中可以大致归纳出各类运算符的优先级
以上的优先级别由上到下递减。初等运算符优先级最高,逗号运算符优先级最低。
位运算符的优先级比较分散(有的在算术运算符之前(如
~),有的在关系运算符之前(如
<<和
>>),有的在关系运算符之后(如
&、
^、
|))。
为了容易记忆,使用位运算符时可加圆括号。