C语言运算符及其优先级汇总表口诀

时间:2021-05-20

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,即指向下一个元素。

C语言运算符表

运算符按照优先级大小由上向下排列,在同一行的运算符具有相同优先级。第二行是所有的一元运算符。
运算符解释结合方式() [] -> .括号(函数等),数组,两种结构成员访问由左向右! ~ ++ -- + -

* & (类型) sizeof

否定,按位否定,增量,减量,正负号,

间接,取地址,类型转换,求大小

由右向左* / %乘,除,取模由左向右+ -加,减由左向右<< >>左移,右移由左向右< <= >= >小于,小于等于,大于等于,大于由左向右== !=等于,不等于由左向右&按位与由左向右^按位异或由左向右|按位或由左向右&&逻辑与由左向右||逻辑或由左向右? :条件由右向左= += -= *= /=

&= ^= |= <<= >>=

各种赋值由右向左,逗号(顺序)由左向右

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章