經常寫程序的時候,遇到運算符優先級的問題,令我汗顏的是,查書的次數挺多的……狠狠心,總結下。不過還要結合大量的編程實踐來深入腦海。
1、首先永遠忘不了的是,逗號運算符級別最低,毫無爭議的還有()括起來的,人工設定了最高優先級,先算括號里的。
2、非人為的,就是四個,函數調用(),[]數組下標,點運算符,間接->運算符。他們是優先級最高的,從左到右。拿->記憶結合性
3、還有最起碼知道,所有的單目運算符具有相同級別的優先級,記住是所有的。且記住都是從右到左
比如:正負號+i和-i,自增自減++i和i--,取地值&a,取值*a,取類型大小運算符sizeof(int),邏輯非!a,邏輯按位取反~a,他們都是單目的運算符,且同時出現在表達式,運算順序是右到左。
4、知道一個規律,總體的運算符的優先級是 單目 > 雙目 > 三目 > 賦值(包含復合賦值),除去幾個特殊的。
有了大前提,接下來是高潮!
用網友總結的一個順口溜加上我的改進,並平時結合實踐一定能事半功倍的牢記!"張飛算計魏延,關羽,或者調戲婦女",什么意思呢?
以下是優先級從高到底的順序,而結合性根據常識就能判斷:
張飛=邏輯非(飛)運算符 !(提醒前面提到的單目,除那四個之外,單目是最高級別的,都是右到左,拿sizeof()來記憶提醒是右到左
算計=算(算)術運算符 其次是+-*/%(小學數學就教的的順序,先算*/%,再算加減,從左到右,小學就是這樣的,沒變)
魏延=移位(魏)運算符 然后是移位運算符《 》 ,說1000 0011誰移4位,那肯定是左到右順序計算,10000011<4,相當於除法
關羽=關(關羽)系和位與(魏羽)運算符 接着是關系運算符,這里注意點:==和!=最后算,還有結合性左到右,其實根據常識也是如此。
然后是位與運算符&(~是單目)
或者=位或 其次位或|,當然如果寫程序多,自然記得位異或^,不用想必夾在中間,學過組成原理就知道左到右的順序
這才能輪的上邏輯與&&(羽),然后是邏輯或||(或者),結合性想到短路操作,就知道是左到右。
調戲=(調)條件運算符?:(三目) 最后,條件運算符,也就是級別低的三目運算符
婦女=賦值和復合賦值 最后是,賦值運算符=和復合的賦值運算符,比如-=,+=,*=,/=,%=,&=,*=,《=,》=,|=,^= ……,都是右到左的結合性
注意:
1、如果程序段中的運算符很多,最好是括號括起來,不要太自信。
2、c++的運算符,增加了幾個,不過原c的,還是適用的。
3、邏輯運算符&&和||和!計算的是整個表達式的邏輯真值,而位運算符的&和^和~和|,計算的是二進制數的每一位
4、這個順口溜要遵循大前提那4條,暨:
人為最高是括號包住的
自然最高是四個(),[],點,—>,左到右。
逗號最低
三級中,單目最高,且單目都是右到左。其次雙目和三目。
歡迎關注
dashuai的博客是終身學習踐行者,大廠程序員,且專注於工作經驗、學習筆記的分享和日常吐槽,包括但不限於互聯網行業,附帶分享一些PDF電子書,資料,幫忙內推,歡迎拍磚!