C語言無法理解 d3 a b a 5 c b ?

時間 2021-06-04 18:27:48

1樓:楓亦

一句話解析就是: "優先順序"+"短路求值"的結果。

詳細解析:先簡記表示式 A:(ab--),那麼可以寫成 A||B&&C,由於&&優先順序高於||,所以 B&&C 簡寫為 D,整個表示式再簡寫為:

A||D,到這裡「短路求值」策略開始發揮作用,因為不論D為真或假,如果 A為真,整個表示式為真。故若求得A為真,D表示式根本不需要計算。

結論:運算子的優先順序和結合性決定表示式規約的方式,或者說加括號的方式,而短路經求值決定了規約後的求值策略。

2樓:似景瞳

||那裡會安插乙個求值順序點,只有左邊求值結束並為假才會開始對右邊求值。

另外你說&&操作先計算所以&&前後的表示式先求值我也是醉了,完全沒有道理。我們把||想象成+,把&&想象成*,原式就像x+y*z,此時確實先算w=y*z,再算x+w,這是運算次序,但不代表求值順序,求值x,求值y,求值z,這3個操作是「不分次序」的,cpu怎麼開心怎麼來。既然次序都不分了,你可以想象到說&&操作先計算所以&&前後的表示式先求值的說法有多沒道理了吧。

但是把||想象成+,把&&想象成*是有問題的,因為漏掉了短路特性規定的求值順序點,也就是x||y&&z,為了保證短路特性(即根據前面的求值結果決定後面是否求值,注意是強制決定求值與否而非「如果不需要求你求了也沒關係」這種弱要求),y必須優先於z求值,而x必須優先於w求值(其中w=y&&z)所以x必須優先於y和z,因此這個式子中,x優先於y,y優先於z,除了這三者其它求值順序不作規定。

3樓:

||保證從左到右順序算,算完再到優先順序。由於||左邊為真,根據短路原則,後面不再算了。如果||左邊為假,後面才輪到判斷||和&&的優先順序。

這時,將會先執行&&,得到的結果作為||的右邊項,進行||的判定。

4樓:

d3=(ab--);

雖然&&優先順序高,但是不一定先算,這個最後講

比如說 (2+3)+3*4 ,雖然括號的優先順序遠高於乘號,但是對於中間的那個加號,是可以先算3*4再算(2+3)的

其實你可以把優先順序想象成打括號

因為&&優先順序比||高,因此當他倆並列時,就相當於在&&的兩邊打上括號,就像這樣

d3=(ab--));

再來看這個式子,打完括號之後運算子之間的關係就比較明顯了,這個式子中是把(ab--))進行||運算。

這裡又有乙個問題,就是C語言的邏輯與、邏輯或具有短路的特點,這個東西資料比較多,這裡我不細說了。這時先求值左側表示式即(ab--))繼續求值,這時才會導致a的變化。

補充資料:為「a+=a-=a*a」預擬的悼詞 (應該是薛非寫的)

以下內容我覺得我當時可能寫得有點問題,不要看,上面的補充資料比這好得多

表示式求值的順序並不完全由運算子優先順序決定,與編譯器的心情也有關係。其實與求值順序直接相關的是這個表示式的結構。根據乙個表示式可以畫出一棵樹,表示運算子與運算元之間的依賴關係。

對於乙個給定的求值順序,對於其中的任意的乙個運算子,除了c語言特殊規定外(比如短路),只要滿足它所涉及到的運算元都在此之前求值完畢(即某個節點的所有子節點都求值完畢),就是合法的求值順序。因此一般來說,合法的求值順序有很多種,而編譯器只會使用其中的乙個。

修改歷史:

修改筆誤,新增格式,新增補充資料

新增補充資料的作者資訊

C語言開始學指標之後覺得很暈,怎麼都無法理解,有什麼好辦法繼續學下去?

已登出 記憶體 一座女生宿舍 指標 門牌號碼 char p abcd 此時,abcd這四個妹子就在女生宿舍的某個房間內,門牌號就是指標p,想去拜訪一下這個房間,就需要用門牌號來找到它,所以可以printf p printf這個函式就是臺望遠鏡,按照門牌號,就可以看到房間內的所有妹子.因為指標表示門牌...

無法理解追星的人是否自私?

五桃夫人 哈哈哈哈哈我也根本理解不了 但這事又和我沒關係我也懶得管 這個我沒關係的事怎麼就是自私了呢 有那個閒錢我出去吃一頓燒烤誰敢管我 為什麼追星會和自私扯在一起啊 只是對乙個人的欣賞吧 當然我說的不包括那些私生啊 真的只是對自己的娛樂放鬆 在不影響身邊人和偶像的情況下也沒什麼啊不明白為什麼追星會...

無法理解女生之間的友誼?

未完 你可能被自己的生物機制給愚弄了。這個世界並不是非黑即白的,中間有著大量的灰色地帶。從人的生物學本能上講,關係對於人是本能的天然的需要。但是並不是說關係就是完美無缺的就是符合乙個人想象的,恰恰相反,關係是需要我們傾注努力去經營的。這個經營包括了很多隨機狀況,我們每個人的喜好並不是說自由和人際關係...