C語言運算符及其優先級匯總表口訣
??? 圓下箭頭一頓號
??? 非凡增減富強針地長
??? 三乘除,四加減,五移位
??? 千萬別把魚忘記,它在盛飯的廚子里
??? 小燈大燈燈燈不等
??? 爸喂魚,舅疑惑,裸雞也疑惑
??? 十三姨,十四父,十五逗,兜到低
??? “圓下箭頭一頓號”指的是第15級的運算符。其中圓指的是運算符(),下指的是下標運算符[],箭頭指的是指向結構體成員運算符->,頓號指的是結構體成員運算符、
??? “非凡增減富強針地長”指的是第14級的運算符。其中非指的是邏輯運算符!,凡指的是按位取反運算符~,增減指的是自增和自減運算符++和--,富指的是負號運算符-,強指的是類型轉換運算符(類型),針指的是指針運算符*,地指的是地址運算符&,長指的是長度運算符Sizeof
??? “三乘除,四加減,五移位” 指的是第13級到第11級的運算符。其中三四五并無實際意義,只是起區分級別而已。也可以想象三指的是第13級運算符。乘除指的是乘法運算符*和除法運算符/,加減指的是加法運算符+和減法運算符-,移位指的是左移運算符<<和右移運算符>>
??? “千萬別把魚忘記,它在盛飯的廚子里”指的是求余運算符%,它位于盛飯的廚子里,即指和乘法運算符、除法運算符在一起。
??? “小燈大燈燈燈不等” 指的是第10級到第9級的運算符。其中小燈大燈指的是關系運算符<、<=、>和>=,燈燈指的是等于運算符==,不等指的是不等于運算符!=
??? “爸喂魚,舅疑惑,裸雞也疑惑”指的是第8級到第4級的運算符。其中,爸喂魚之指的是第8級的按位與運算符&,舅疑惑指的是第7級的按位異或運算符^和第6級的按位或運算符||,裸雞也疑惑指的是第5級、第4級的邏輯與運算符&&和邏輯或運算符||
??? “十三姨,十四父,十五逗,兜到低”指的是第3級到第1級的運算符。其中,十三姨指的是條件運算符?: (三有雙重含義,即指?:的優先級別是三,它的運算符類型也是三目,?難道不是姨即疑惑嗎?),十四父的十四沒有實際意義,父指的是賦值運算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,十五逗指的是第1級的運算符,兜到低指的是15級運算符以,結束。
??? 附錄:C語言運算符及優先級
??? 移位五,關系六;??? //移位運算符:<< >> ,關系:> < >= <= 等
??? 等于(與)不等排第七;??? //即== !=
??? 位與異或和位或;??? //這幾個都是位運算: 位與(&)異或(^)位或(|)
??? "三分天下"八九十;
??? 邏輯或跟與?????????? //邏輯運算符:|| 和 &&
??? 十二和十一;??????????? //注意順序:優先級(||)? 底于 優先級(&&)
??? 條件高于賦值,?????? //三目運算符優先級排到 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,即指向下一個元素。
??? 圓下箭頭一頓號
??? 非凡增減富強針地長
??? 三乘除,四加減,五移位
??? 千萬別把魚忘記,它在盛飯的廚子里
??? 小燈大燈燈燈不等
??? 爸喂魚,舅疑惑,裸雞也疑惑
??? 十三姨,十四父,十五逗,兜到低
??? “圓下箭頭一頓號”指的是第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??????? ,??????? 逗號運算符????????????????????????????? 雙目???????? 自左向右
??? ②括號成員第一;??????? //括號運算符[]() 成員運算符.? ->??? 全體單目第二;??????? //所有的單目運算符比如++ -- +(正) -(負) 指針運算*&
??? 乘除余三,加減四;?? //這個"余"是指取余運算即%
??? 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,即指向下一個元素。