熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

C++中運算符優先級的學習注解

2013-11-15 12:50:17  來源: ASP編程 

  提起運算符的優先級很多了解C++的過來人都會想這有什麼難的?不就是誰的優先級高就算誰麼確實如此運算符的優先級不是一個大問題但對於一個初學者來說卻經常容易在上面迷糊與犯錯而對於一個了解C++的人來說我相信也會偶爾在上面摔倒不信就繼續往下讀

  優先級高的先運算帶來的困惑

  C++中運算符的優先級有一張表表裡把運算符進行了分類這張表是不需要死記硬背的只要有個大致的輪廓就OK了例如應該記住最低優先級是逗號運算符其次是賦值運算符再其次是三目運算符而關系運算符的優先級高於邏輯運算符(不包括邏輯非運算)算術運算符的優先級高於關系運算符象++和﹣﹣的優先級比前面幾個都高但最高的要屬()了知道這些後你的腦海裡一定有一條准則了優先級高的先運算那麼下面看一個例子

  int x=y=

  !x&&x+y&&++y

  上面的語句中出現了!&& +++這四個運算符那麼問題來了到底先算誰呢?

  有一個姓蔡的同學站起來說++運算符在這裡面優先級最高理所應當最先算++既先計算++y再算!x再算x+y最後把它們&&起來按照蔡同學的思路第二步的結果是&&x+y&&由於&&是嚴格運算有一個為結果既為所以不需要計算x+y了整個語句的結果是按照上面蔡同學的說法執行完後y的值應該是這對不對呢?

  一位姓高的同學站起來反駁道我覺得應該先計算!x如果值為假則不需要計算下去最後結果為假如果值為真再計算x+y同理如果其值為真再去計算++y否則最後結果也為假

  蔡同學不服起來說高同學你覺得++和!誰的優先級高呢?高同學答道那當然是++高蔡同學接著問那為什麼還要先計算!呢?高同學答不出來了

  是呀為什麼要先算!呢?

  加括號確定優先級的方法

  高同學說的是正確的為什麼呢?下面我給大家解釋一下當多個優先級不同的運算符在一起時為了不混淆可以先加上括號這樣就分出層次了相同層次的考慮結合性問題當確定下來先算那塊時再往這塊裡面深入例如上面的例子我們可以這樣加上括號從左向右看由於!比&&優先級高所以有(!x)又由於&&比+優先級低所以有(x+y)而++優先級高於&&所以(++y)這樣整個式子就變成了(!x)&&(x+y)&&(++y)最外層的是兩個&&運算由於&&的結合性是從左至右所以上式可看成A&&B&&C先計算A再計算B最後算C由於x=則!x就為假後面的就不需要再算了整個語句的值為假執行完後y的值沒變還是

  所以碰到不清楚先算誰後算誰時先加個括號看看就明白了先後次序下面做一個加括號的練習給語句c=a>b?ab加括號此語句有三個運算符=>應該怎樣加括號呢?

  第一種方案c=((a>b)?ab)

  第二種方案c=(a>(b?ab))

  第三種方案(c=a)>(b?ab)

  應該是那一種呢?按照運算符優先級的高低順序>優先級高於=所以不可能把(c=a)括起來而>優先級高於? 運算符所以也不可能把(b?ab)括起來因此第一種答案正確

  下面再看一個類似的例子

  int i=j=k

  k=i

  猛然一看,有些人上來可能就要計算++i和++j了。TW.wINgWIT.COm這裡不妨先加括號看看。從左至右看,<的優先級高於=而且又高於? :,所以有k=(iASP編程免費提供,內容來源於互聯網,本文歸原作者所有。

推薦文章
Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.