条件运算符和赋值运算符的优先级(C语言中运算符优先级排序)
本文目录
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就不再判断。
望采纳
关系运算符 算数运算符 赋值运算符 优先级 排个顺序!
C语言的运算符包括单目运算符、双目运算符、三目运算符。
优先级如下:
第1优先级:
各种括括号,如()、等、成员运算符 . ;
第2优先级:
所有单目运算符,如++、–、!、~等;
第3优先级
(算数运算符):乘法运算符*、除法运算符/、求余运算符%;
第4优先级
(算数运算符):加法运算符+、减法运算符-;
第5优先级
(移位运算符):移位运算符《《、》》;
第6优先级
(条件运算符):大于运算符》、大于等于运算符》=、小于运算符《、小于等于运算符《=;
第7优先级(条件运算符):等于运算符==、不等于运算符!=;
第8优先级
(按位运算符):按位与运算符&;
第9优先级
(按位运算符):按位异或运算符^;第10优先级(按位运算符):按位或运算符|;
第11优先级
(逻辑与运算符):逻辑与运算符&&;第12优先级逻辑与运算符:逻辑或运算符||;
第13优先级:
三目条件运算符 ?: ;
第14优先级:
各种赋值运算符,如=、+=、-=、*=、/= 等;
第15优先级:
逗号运算, 。算数运算符》移位运算符》条件运算符》按位运算符》逻辑运算符》赋值
c中运算符的优先级怎么排列
c语言运算符优先级从高到低的顺序依次如下:
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。
优先级与求值顺序无关。如a+b && b*c,虽然*优先级最高,但这个表达式求值顺序是从左到右。
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。
序列点
序列点是程序执行中的一个点,在这个点之前,前面的表达式的求值和副作用已经完成,而后面表达式的求值和副作用还没有发生。C 标准定义以下序列点:
(1)运算符&&;运算符||;逗号运算符,;条件运算符?:的第一个子表达式求值结束后。
(2)函数调用运算符()中对所有实参数完成求值之后。
(3)每个完整表达式结束时。完整表达式包括变量初始化表达式,表达式语句的表达式,return 语句的表达式,if 或 switch 语句中的控制表达式,while 或 do语句的控制表达式,for 语句的所有三个表达式。
(4)标准库函数返回之前,标准输入输出函数格式化转换说明符关联动作之后,标准查找函数和排序函数在调用比较函数之前和之后及参数传递之后。
由序列点的定义可知,与运算符&&;或运算符||;逗号运算符,;条件运算符?:等 4 个运算符的左操作数属于前一个序列点,右操作数属于后一个序列点,因此,这 4 个运算符的左操作数的求值要先于右操作数完成。
在C语言中,“”“:”是什么意思
1、意思:是条件运算符,条件运算符是C语言中唯一的三目运算符,就是说他有三个运算对象。
2、条件运算符的形式是“?:”由他构成的表达式称为条件表达式。形式为:表达式1?表达式2:表达式3。
运算符
表达式为:表达式1?表达式2:表达式3
先求解表达式1
若其值为真(非0)则将表达式2的值作为整个表达式的取值,
否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。
例如:max=(a》b)?a:b
就是将a和b二者中较大的一个赋给max。
以上内容参考:百度百科-条件运算符
更多文章:
python如何安装sklearn库(用Python,在 import sklearn 总是报错怎么办)
2026年4月4日 20:00
linux删除日志文件命令(LINUX下,清除日志的脚本帮帮忙)
2026年4月4日 19:40
易语言线程优化不占cpu(易语言做出的小程序,如何降低其cpu占有率)
2026年4月4日 19:00
js写后端用什么框架(对于一个有js基础的人来说,nodejs难还是php难)
2026年4月4日 18:20







