由於C語言的運算子優先順序與C++的不完全一樣(主要是增加了幾個運算子),所以這個口訣不能完全實用於C++.但是應該能夠相容,大家可以比較一下他們的區別應該就能夠很快掌握C++的優先順序的
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++)!=''); :
重點:++後增運算子優先順序高於*
1.*strDest++相當於 *(strDest++)
2.由於是後自增,故執行順序為:
*strDest=*strSrc
strDest++ strsrc++ //該級順序不明
將*strDest與''比較 //即,整個運算式的值為*strDest與''的比較結果
值得注意的是,對於賦值運算式,運算式本身的值等於左邊子運算式的值。
通過以上深入的分析,我們知道這個運算式完成了以下多個功能:
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 |
否定,按位否定,增量,減量,加號或減號, 間接,取地址,類型轉換,求大小 |
由右向左 |
* / % |
乘,除,模數 |
由左向右 |
+ - |
加,減 |
由左向右 |
<< >> |
左移,右移 |
由左向右 |
< <= >= > |
小於,小於等於,大於等於,大於 |
由左向右 |
== != |
等於,不等於 |
由左向右 |
& |
按位與 |
由左向右 |
^ |
按位異或 |
由左向右 |
| |
按位或 |
由左向右 |
&& |
邏輯與 |
由左向右 |
|| |
邏輯或 |
由左向右 |
? : |
條件 |
由右向左 |
= += -= *= /= &= ^= |= <<= >>= |
各種賦值 |
由右向左 |
, |
逗號(順序) |
由左向右 |