加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C语言运算符优先级

发布时间:2020-12-15 17:33:37 所属栏目:百科 来源:网络整理
导读:一个表达式可以包含多个运算符。在这种情况下,运算符的优先级决定表达式的哪部分被处理为每个运算符的操作数。例如,按照运算规则,表达式中? * 、/、以及 % 的优先级比 + 和 - 高。如下列表达式: a - b * c 相当于 a-(b*c)。如果想让操作数以不同的方
一个表达式可以包含多个运算符。在这种情况下,运算符的优先级决定表达式的哪部分被处理为每个运算符的操作数。例如,按照运算规则,表达式中?*、/、以及 % 的优先级比 + 和 - 高。如下列表达式:

a - b * c

相当于 a-(b*c)。如果想让操作数以不同的方式组合在一起,则必须使用括号:

(a - b) * c

如果一个表达式中的两个操作数具有相同的优先级,那么它们的结合律(associativity)决定它们的组合方式是从左到右或是从右到左。例如,算术运算符和操作数的组合方式是从左到右,赋值运算符则是从右到左,如表 1 所示。

表1 运算符组合方式
表达式 结合律 组合方式
a/b%c 从左到右 (a/b)%c
a=b=c 从右到左 a=(b=c)

表 2 列出优先级次序下,所有 C 语言运算符的优先级和结合律

表2 运算符优先级和结合律
优先级 运算符 结合律
1 后缀运算符:[] ? ?() ? ?· ? ?-> ? ?++ ? ?--(类型名称){列表} 从左到右
2 一元运算符:++ ? ?-- ???! ? ?~ ? ?+ ? ?- ? ?* ? ?& ? ?sizeof_Alignof 从右到左
3 类型转换运算符:(类型名称) 从右到左
4 乘除法运算符:* ? ?/ ? ?% 从左到右
5 加减法运算符:+ ? ?- 从左到右
6 移位运算符:<< ? ?>> 从左到右
7 关系运算符:<<= ? ?>>= 从左到右
8 相等运算符:== ? ?!= 从左到右
9 位运算符 AND:& 从左到右
10 位运算符 XOR:^ 从左到右
11 位运算符 OR:| 从左到右
12 逻辑运算符 AND:&& 从左到右
13 逻辑运算符 OR:|| 从左到右
14 条件运算符:?: 从右到左
15 赋值运算符:
? ? ?= ? ? ? ? += ? ? ? ?-= ? ? ? *= ? ? ? /= ? ? ?%= ? ? ? &= ? ? ? ^= ? ? ?|= ??
? ?<<= ? ? ?>>=
从右到左
16 逗号运算符:, 从左到右

表 2 中优先级最高的运算符中的最后一个(类型名称){列表} 是 C99 新增加的。

一些运算符记号在表 2 中出现了两次。例如,自增运算符 ++ 和自减运算符 --,在作后缀运算符(如表达式 x++)时,较其用作前缀运算符(如表达式 ++x)时,具有较高的优先级。

+、-、* 和 & 运算符记号不但可以当作一元运算符(unary operator,只需要一个操作数),也可以当作二元运算符(binary operator,需要两个操作数)。例如,* 只有一个操作数的时候,就是间接运算符(indirection operator),而有两个操作数的时候,就是乘号。

在这些例子中,一元运算符比二元运算符具有更高的优先级。例如,表达式 *ptrl**ptr2 等同于表达式(*ptrl)*(*ptr2)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读