(),=,==,!=,<=,>,
等等,
&&,||
等等很多运算符,他们的优先顺序如何?
这么多,头都晕了···
谢谢
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级
âï¼âéå·è¿ç®ç¬¦ã
å ·ä½å¯åè§ä¸å¾ï¼
圆下箭头一顿号
非凡增减富强针地长
三乘除,四加减,五移位
千万别把鱼忘记,它在盛饭的厨子里
小灯大灯灯灯不等
爸喂鱼,舅疑惑,裸鸡也疑惑
十三姨,十四父,十五逗,兜到低
“圆下箭头一顿号”指的是第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,即指向下一个元素。本回答被提问者采纳