簡體   English   中英

關於 C 中運算符優先級的混淆

[英]Confusion about operator precedence in C

我對如何解釋以下代碼段中運算符的優先級感到有些困惑:

int a,b,c,d;
a=b=c=d=1;
a=++b>1 || ++c>1 && ++d>1

此代碼片段末尾的 a,b,c,d 的值分別為 1,2,1,1。 我試圖破譯這里發生的事情,但無濟於事。

我知道 ++ 的優先級高於任何其他運算符,那么為什么 b、c 和 d 不等於 2? 根據我收到的結果,我猜想當在第一步 b 遞增到 2 時,表達式是從左到右計算的,因此 ++b>1 為真,因為有一個邏輯 OR 立即返回答案。 就像是: (++b>1) || (++c>1 && ++d>1)

除了將操作數組合在一起之外,運算符優先級還有其他作用嗎? 例如,它與執行順序有什么關系?

原因是短路評估,這意味着只要一個條件被評估為true (從左數),評估就會停止。

這個:

a=++b>1 || ++c>1 && ++d>1

因此類似於:

if(++b > 1) {
    a = true;
} else if(++c > 1) {
    if(++d > 1) {
        a = true;
    }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM