问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言里面的运算符优先顺序如何?

发布网友 发布时间:2022-04-24 03:37

我来回答

3个回答

热心网友 时间:2022-05-21 15:42

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

各等级运算符如下:

(以下说明中,对传统的1级和2级做了细化,1和2对应传统1级,3和4对应传统2级,所以细化说明共有17级。)

1、基本表达式 1级

基本表达式(Primary expressions),主要是用于运算符之间,做为运算数。

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

优先级提升表达式是指圆括号包围的表达式,如“( expression )”


2、后缀表达式 2级

postfix-expression [ expression ],数组下标运算。

postfix-expression ( argument-expression-list),函数调用,括号内的参数可选。

postfix-expression . identifier,成员访问,

postfix-expression -> identifier,成员访问,->号之前应为指针。

postfix-expression ++,后缀自增

postfix-expression --,后缀自减

( type-name ) { initializer-list }

( type-name ) { initializer-list , } 复合初始化,C99后新增。

3、单目/一元运算 3级

++ unary-expression 前缀自增

-- unary-expression 前缀自减

unary-operator cast-expression 单目转型表式式, 包括 取地址& ,提领 * , 正号+ ,负号- 位反~ 逻辑否!。

sizeof unary-expression 求类型长度,对表达式求类型长度

sizeof ( type-name ) 求类型长度


4、强制类型表达式 4级

( type-name ) cast-expression,强制表达式成为type-name指定的类型。


5、乘法表达式 5级

“ * ” 乘法运算符;“ / ”除法运算符;“ % ” 取余运算符。


6、加法运算符 6级

“ + ”加法运算符;“ - ”减法运算符。


7、移位运算符 7级

<< 左移运算符;>> 右移运算符。


8、关系运算符 8级

<、<=、>、>=关系运算符。


9、相等运算符 9级

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


10、位与运算符 10级

“ & ”按位与运算符


11、位异或运算符 11级

“ ∧ ”按位异或运算符(Bitwise exclusive OR operator)。


12、位或运算符 12 级

“ | ”按位或运算符(Bitwise inclusive OR operator)。


13、逻辑与运算符 13级

“&&”逻辑与运算符。


14、逻辑或运算符 14 级

“ || ”逻辑或运算符。


15、三元条件运算符 15级

? :条件运算符。


16、赋值运算符 16 级

=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=赋值运算符。


17、逗号运算符 17级

“,”逗号运算符。

具体可参见下图:

热心网友 时间:2022-05-21 15:42

C语言运算符及其优先级汇总表口诀
圆下箭头一顿号
非凡增减富强针地长
三乘除,四加减,五移位
千万别把鱼忘记,它在盛饭的厨子里
小灯大灯灯灯不等
爸喂鱼,舅疑惑,裸鸡也疑惑
十三姨,十四父,十五逗,兜到低

“圆下箭头一顿号”指的是第15级的运算符。
正在装载数据……
其中圆指的是运算符(),下指的是下标运算符[],箭头指的是指向结构体成员运算符->,顿号指的是结构体成员运算符、
“非凡增减富强针地长”指的是第14级的运算符。其中非指的是逻辑运算符!,凡指的是按位取反运算符~,增减指的是自增和自减运算符++和--,富指的是负号运算符-,强指的是类型转换运算符(类型),针指的是指针运算符*,地指的是地址运算符&,长指的是长度运算符Sizeof
“三乘除,四加减,五移位” 指的是第13级到第11级的运算符。其中三四五并无实际意义,只是起区分级别而已。也可以想象三指的是第13级运算符。乘除指的是乘法运算符*和除法运算符/,加减指的是加法运算符+和减法运算符-,移位指的是左移运算符<<和右移运算符>>
“千万别把鱼忘记,它在盛饭的厨子里”指的是求余运算符%,它位于盛饭的厨子里,即指和乘法运算符、除法运算符在一起。
“小灯大灯灯灯不等” 指的是第10级到第9级的运算符。其中小灯大灯指的是关系运算符<、<=、>和>=,灯灯指的是等于运算符==,不等指的是不等于运算符!=
“爸喂鱼,舅疑惑,裸鸡也疑惑”指的是第8级到第4级的运算符。其中,爸喂鱼之指的是第8级的按位与运算符&,舅疑惑指的是第7级的按位异或运算符^和第6级的按位或运算符||,裸鸡也疑惑指的是第5级、第4级的逻辑与运算符&&和逻辑或运算符||
“十三姨,十四父,十五逗,兜到低” 指的是第3级到第1级的运算符。其中,十三姨指的是条件运算符?: (三有双重含义,即指?:的优先级别是三,它的运算符类型也是三目,?难道不是姨即疑惑吗?),十四父的十四没有实际意义,父指的是赋值运算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、 ^=和|= ,十五逗指的是第1级的运算符,兜到低指的是15级运算符以,结束。

附录:C语言运算符及优先级
优先级 运算符 含义 运算符类型 结合方向
15 () 圆括号 单目 自左向右
[] 下标运算符
—> 指向结构体成员运算符
、 结构体成员运算符
14 ! 逻辑非运算符 自右向左

~ 按位取反运算符
++ 自增运算符
-- 自减运算符
- 负号运算符
(类型) 类型转换运算符
* 指针运算符
& 地址运算符
Sizeof 长度运算符
13 * 乘法运算符 双目 自左向右
/ 除法运算符
% 求余运算符
12 + 加法运算符
- 减法运算符
11 << 左移运算符
>> 右移运算符
10 <、<=、>、>= 关系运算符
9 == 等于运算符
!= 不等于运算符
8 & 按位与运算符
7 ^ 按位异或运算符
6 | 按位或运算符
5 && 逻辑与运算符
4 || 逻辑或运算符
3 ?: 条件运算符 三目 自右向左

2 =、+=、-=、*=、
/=、%=、>>=、
<<=、&=、^=、|= 赋值运算符 双目
1 , 逗号运算符 双目 自左向右


括号成员第一; //括号运算符[]() 成员运算符. ->
全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*&
乘除余三,加减四; //这个"余"是指取余运算即%
移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等
等于(与)不等排第七; //即== !=
位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|)
"三分天下"*十;
逻辑或跟与 //逻辑运算符:|| 和 &&
十二和十一; //注意顺序:优先级(||) 底于 优先级(&&)
条件高于赋值, //三目运算符优先级排到 13 位只比赋值运算符和","高//需要注意的是赋值运算符很多!
逗号运算级最低! //逗号运算符优先级最低

由于C语言的运算符优先级与C++的不完全一样(主要是增加了几个运算符),所以这个口诀不能完全实用于C++.但是应该能够兼容,大家可以比较一下他们的区别应该就能够很快掌握C++的优先级的!
((*strDest++=*strSrc++)!='\0'); :
重点:++后增运算符优先级高于*
1.*strDest++相当于 *(strDest++)
2.由于是后自增,故执行顺序为:
*strDest=*strSrc
strDest++ strsrc++ //该级顺序不明
将*strDest与'\0'比较 //即,整个表达式的值为*strDest与'\0'的比较结果
值得注意的是,对于赋值表达式,表达式本身的值等于左边子表达式的值。
通过以上深入的分析,我们知道这个表达式完成了以下多个功能:
1.对于指针strDest, strSrc,将strSrc所指的内存空间的值赋给由strDest所指的内存空间。
2.判断赋值后的strDest所指的内存空间的指是否等于0。
3.对于指针strDest,strSrc,他们的值分别加1,即指向下一个元素。
即:该表达式实现了以下三个功能:
1.对于指针strDest, strSrc,将strSrc所指的内存空间的值赋给由strDest所指的内存空间。
2.判断赋值后的strDest所指的内存空间的值是否等于0。
3.对于指针strDest,strSrc,他们的值分别加1,即指向下一个元素。

热心网友 时间:2022-05-21 15:43

附录有的啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
关于海贼王的碟 海贼王852什么时候更新的最新相关信息 买个1G或2G的U盘要多少钱 请问1G的金士顿U盘的价格是多少? 低血糖可能另有隐情 “假性低血糖”需警惕 自发性血糖过低症[治疗] 2020年 巨蟹座到几月几日才能20岁? 1991年出生的20岁巨蟹座的女生是怎么样的 手机安全气囊发明背景 手机安全气囊简介 C语言三目运算符问题 “三目运算符”与“赋值运算符”的优先级。是什么?先算哪个运算符? 从常州湖塘怎么去常州新北区万达广场 常州万达广场什么时间开业,请问是光棍节那天吗?想去看看! 常州新北万达广场的项目动态 常州新区万达广场到常州诌区有多少公里 常州高铁站在哪?怎么去万达广场 常州新北万达广场怎么样?好不好?值不值得买? 吾悦广场和万达广场有什么区别? 常州有几个吾悦广场? 常州万达广场商业管理有限公司怎么样? 常州这边有哪几个商业区是比较热闹繁华的?求解 常州新北万达广场的广场简介 如何乘坐公交车到达常州市新北区万达广场 ? 和田枣多少钱一斤 和田玉枣一斤多少钱? 今年特级和田大枣多少钱一斤? 民事诉讼中当庭提交证据是否有效? 民事诉讼一审时间一般是多久? 被告人如何退赔 C语言中三目运算符是什么? C语言?:三目运算符用法问题。 C语言的运算符的优先级:逻辑运算符、条件运算符、赋值运算符、关系运... 运算符优先级由高到低的顺序是什么? C语言,运算符的优先级 C++三目运算符优先级问题 C语言 三目运算符 三目运算符的顺序 a?b:c=0 这个运算符的顺序我觉得应该是先计算a?b:c如果为真就是a,否 执行int a=2;a*=a+2;后a的值为是? java怎么判断运算符的优先级 《伪装者》明诚扮演者是谁 iPhonex充电很慢充不满电是什么原因? 电视剧伪装者中明诚的扮演者是谁,他还演过哪些电影电视剧 iphonex充电突然变得特别慢是怎么回事? 伪装者阿诚的扮演者 iphone x手机充电慢 耗电比较快 怎么办?解决方法 电视剧伪装者明诚的扮演者叫什么 iphone x充电慢 耗电比较快 怎么办? 伪装者电视剧的人物明楼明诚是谁演的 为什么苹果x充电很慢