[英]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)
是相同的(1 != 3)
。 int
值作為結果,因此不需要使用_Bool
(或帶有stdbool.h
bool
)。 ==
和!=
運算符優先級相同,因為它們都屬於同一組相等運算符。 為了將具有相同優先級的運算符分開,我們使用該組的運算符關聯性,在這種情況下是從左到右。 意味着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.