簡體   English   中英

語句中運算符的優先級和執行

[英]precedence and execution of the operators in the statement

無法理解如何為布爾變量“ check”分配1或0。這里2 == 2為true,但是2不等於3,因此應該為false。

/* practicing the precedence of assignment operator */

#include <stdio.h>

int main() {

    _Bool check;
    check = (2 == 2 != 3);

    printf("the value of _Bool is %d\n",check);


    return 0;
}

我希望結果是錯誤的

實際發生的情況是這樣的

(2 == 2 != 3)

(2 == 2) != 3)

這是

(1 != 3)

依次變成

(1)

也許您需要的是

(2 == 2 && 2 != 3)

兩件事情:

==!=運算符優先級相同,因為它們都屬於同一組相等運算符。 為了將具有相同優先級的運算符分開,我們使用該組的運算符關聯性,在這種情況下是從左到右。 意味着2 == 2 != 3保證被解析為(2 == 2) != 3 這樣我們得到:

  • 2 == 2 > 1
  • 1 != 3 > 1

值得注意的是==!=優先級都比= ,因此表達式= (2 == 2 != 3)的括號是不需要的(但是不確定優先級時可以使用)。


關於執行/評估的順序 ,這是另一個不要與運算符優先級混淆的術語。 表達式中==!=操作數的求值順序未指定,這意味着我們不知道哪個將首先執行。

在這種情況下,這無關緊要,但是如果我們有此check = a() == b() != c(); ,它可能有。 在這里,我們不知道首先執行的三個函數中的哪個。 我們只知道,運算符優先級說,結果a應的結果進行比較b結果之前c ,但功能c仍可以首先執行。

暫無
暫無

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

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