导航:首页 > 源码编译 > 编译原理中操作符的优先级

编译原理中操作符的优先级

发布时间:2022-12-23 11:18:09

1. 运算符优先级由高到低的顺序是什么

c语言运算符优先级从高到低的顺序依次如下:



优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。

优先级与求值顺序无关。如a+b && b*c,虽然*优先级最高,但这个表达式求值顺序是从左到右。

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。

相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。

序列点

序列点是程序执行中的一个点,在这个点之前,前面的表达式的求值和副作用已经完成,而后面表达式的求值和副作用还没有发生。C 标准定义以下序列点:

(1)运算符&&;运算符||;逗号运算符,;条件运算符?:的第一个子表达式求值结束后。

(2)函数调用运算符()中对所有实参数完成求值之后。

(3)每个完整表达式结束时。完整表达式包括变量初始化表达式,表达式语句的表达式,return 语句的表达式,if 或 switch 语句中的控制表达式,while 或 do语句的控制表达式,for 语句的所有三个表达式。

(4)标准库函数返回之前,标准输入输出函数格式化转换说明符关联动作之后,标准查找函数和排序函数在调用比较函数之前和之后及参数传递之后。

由序列点的定义可知,与运算符&&;或运算符||;逗号运算符,;条件运算符?:等 4 个运算符的左操作数属于前一个序列点,右操作数属于后一个序列点,因此,这 4 个运算符的左操作数的求值要先于右操作数完成。

2. 运算符优先级(C语言中)

1级优先级
左结合
()
圆括号
[]
下标运算符
->
指向结构体成员运算符
.
结构体成员运算符
2级优先级
右结合
!
逻辑非运算符
~
按位取反运算符
++
前缀增量运算符
--
前缀增量运算符
+
正号运算符
-
负号运算符
(类型)
类型转换运算符
*
指针运算符
&
地址与运算符
sizeof
长度运算符
3级优先级
左结合
*
乘法运算符
/
除法运算符
%
取余运算符
4级优先级
左结合
+
加法运算符
-
减法运算符
5级优先级
左结合
<<
左移运算符
>>
右移运算符
6级优先级
左结合
<、<=、>、>=
关系运算符
7级优先级
左结合
==
等于运算符
!=
不等于运算符
8级优先级
左结合
&
按位与运算符
9级优先级
左结合
^
按位异或运算符
10级优先级
左结合
|
按位或运算符
11级优先级
左结合
&&
逻辑与运算符
12级优先级
左结合
||
逻辑或运算符
13级优先级
右结合
?
:
条件运算符
14级优先级
右结合
=
+=
-=
*=
/=
%=
&=
^=
|=
<<=
>>=
全为赋值运算符
15级优先级
左结合

逗号运算符
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。
具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,[]与数组相关,而->及.是取结构成员。
其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的
真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。
另外在c语言里
没有前置后置之分
因为++
--
是右结合所以
右侧优先运算
表现为
"后置优先级比较高"
的假象
前置和后置的区分是因为运算符重载而后加入c++的
接下来是算术运算符,*、/、%的优先级当然比+、-高了。
移位运算符紧随其后。
其次的关系运算符中,<
<=
>
>=要比
==
!=高一个级别,不大好理解。
所有的逻辑操作符都具有不同的优先级(单目运算符出外,!和~)
逻辑位操作符的"与"比"或"高,而"异或"则在它们之间。
跟在其后的&&比||高。
接下来的是条件运算符,赋值运算符及逗号运算符。
在c语言中,只有4个运算符规定了运算方向,它们是&&、|
|、条件运算符及赋值运算符。
&&、|
|都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。如
a
=
0
&&
b;
&&运算符的左边位0,则右边表达式b就不再判断。
望采纳

3. C语言中算数运算符,关系运算符,逻辑运算符的优先级别

1级优先级(左结合)
() 圆括号;[]下标运算符;->指向结构体成员运算符;. 结构体成员运算符。
2级优先级(右结合)
!逻辑非运算符;~按位取反运算符;++前缀增量运算符;--前缀减量运算符;+正号运算符;-负号运算符;(类型)类型转换运算符;*指针运算符;&地址运算符;sizeof长度运算符。
3级优先级(左结合)
*乘法运算符;/除法运算符;%取余运算符。
4级优先级(左结合)
+加法运算符;-减法运算符。
5级优先级(左结合)
<<左移运算符;>>右移运算符。
6级优先级(左结合)
<、<=、>、>=关系运算符。
7级优先级(左结合)
==等于运算符;!=不等于运算符。
8级优先级(左结合)
&按位与运算符。
9级优先级(左结合)
^按位异或运算符。
10级优先级(左结合)
|按位或运算符。
11级优先级(左结合)
&&逻辑与运算符。
12级优先级(左结合)
||逻辑或运算符。
13级优先级(右结合)
? :条件运算符。
14级优先级(右结合)
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=赋值运算符。
15级优先级(左结合)
,逗号运算符。

4. C语言运算符优先级顺序

C语言运算符优先级顺序如下所示:

(4)编译原理中操作符的优先级扩展阅读

一个表达式可以包含多个运算符。在这种情况下,运算符的优先级决定表达式的哪部分被处理为每个运算符的操作数。例如,按照运算规则,表达式中*、/、以及 % 的优先级比 + 和 - 高。如下列表达式:

a - b * c

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

(a - b) * c

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

5. c语言中运算符有哪几种,优先级顺序是怎样

C语言中,运算符除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符。

运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。

一级运算符:标识,常量,字符串文字量,优先级提升表达式最优先执行。

二级运算符:数组下标运算(expression)、函数调用(argument-expression-list)、成员访问(identifier、-> identifier)、后缀自增(i++)、后缀自减(i--)、复合初始化(initializer-list)。

三级运算符:前缀自增(++i)、前缀自减(--i)、单目转型表式式(取地址& ,提领 * , 正号+ ,负号-、位反~ 逻辑否!)、求类型长度(sizeof unary-expression)。

四级运算符:强制表达式成为type-name指定的类型( type-name ) cast-expression。

五级运算符:“ * ” 乘法运算符。

六级运算符:“ + ”加法运算符。

七级运算符:<< 左移运算符;>> 右移运算符。

八级运算符:<、<=、>、>=关系运算符。

九级运算符:“ == ”等于运算符;“ != ”不等于运算符。

十级运算符:“ & ”按位与运算符。

十一级运算符:“ ∧ ”按位异或运算符。

十二级运算符:“ | ”按位或运算符。

十三级运算符:“&&”逻辑与运算符。

十四级运算符:“ || ”逻辑或运算符。

十五级运算符:? :条件运算符。

(5)编译原理中操作符的优先级扩展阅读

C语言中各运算符的结合性:

1、左结合性(自左至右):

例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合方向就称为“左结合性”。

2、右结合性(自右至左)

自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

6. 编译原理算符优先分析法中构造分析表的时候,井号和其他符号的优先级怎么判断

产生式中,只有两种文法符号:终结符和非终结符。
所有的优先关系,也仅仅只存在于这两种符号之间。

并号不是产生式中的符号,它仅仅只是将两个左端相同的产生式写在一个式子里的省略写法用的辅助符号。
所以,它不存在优先关系。

遇到并号之类的辅助符号,应当将它们拆开,写成标准形式的产生式,再分析产生式中的优先关系。

7. c语言中的运算符优先级高低是什么意思

运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。

运算符的优先级是从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。


(7)编译原理中操作符的优先级扩展阅读

优先级与求值顺序无关。如a+b && b*c,虽然*优先级最高,但这个表达式求值顺序是从左到右。

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。

相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。

指针最优,单目运算优于双目运算。如正负号。先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7。逻辑运算最后结合。

阅读全文

与编译原理中操作符的优先级相关的资料

热点内容
苹果手机文档安卓上怎么打开 浏览:521
如何做淘宝代理服务器 浏览:662
gz压缩文件夹 浏览:177
字母h从右往左跑的c语言编程 浏览:127
安卓手机如何拥有苹果手机横条 浏览:765
业余编程语言哪个好学 浏览:137
按照文件夹分个压缩 浏览:104
航空工业出版社单片机原理及应用 浏览:758
如何在电信app上绑定亲情号 浏览:376
安卓的怎么用原相机拍月亮 浏览:805
配音秀为什么显示服务器去配音了 浏览:755
c盘清理压缩旧文件 浏览:325
app怎么交付 浏览:343
图虫app怎么才能转到金币 浏览:175
如何做征文app 浏览:446
用什么app管理斐讯 浏览:169
安卓如何下载宝可梦剑盾 浏览:166
编译器开发属于哪个方向 浏览:940
megawin单片机 浏览:687
以色列加密货币监督 浏览:909