国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-17 05:26:09
字體:
來源:轉載
供稿:網友

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

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

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

  int x=1,y=0; 

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

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

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

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

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

  是呀,為什么要先算呢? 三層交換技術 交換機與路由器密碼恢復 交換機的選購 路由器設置專題 路由故障處理手冊 數字化校園網解決方案 加括號確定優先級的方法 

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

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

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

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

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

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

  下面再看一個類似的例子:

  int i=8,j=4,k;

  k=i
  猛然一看,有些人上來可能就要計算++i和++j了。這里不妨先加括號看看。從左至右看,<的優先級高于=而且又高于? :,所以有k=(i
  所以運算符的優先級千萬要小心,既不是想象的那么難,也不是想象的那么輕易。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东宁县| 申扎县| 万年县| 庄浪县| 石首市| 称多县| 汨罗市| 张掖市| 金川县| 思茅市| 灵璧县| 城口县| 上饶县| 乌拉特中旗| 天祝| 瑞昌市| 房山区| 洪泽县| 汉川市| 大关县| 高淳县| 湖口县| 饶河县| 莱西市| 鹿邑县| 中方县| 东平县| 进贤县| 乌拉特中旗| 赤峰市| 尚义县| 开江县| 郓城县| 兖州市| 长岭县| 菏泽市| 丰县| 迁安市| 新疆| 伊宁县| 崇文区|