无法理解如何为布尔变量“ 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;
}
我希望结果为假
答案 0 :(得分:1)
实际发生的事情是这样的
(2 == 2 != 3)
成为
(2 == 2) != 3)
是
(1 != 3)
反过来变成
(1)
也许您需要的是
(2 == 2 && 2 != 3)
答案 1 :(得分:0)
两件事:
(2 ==2 != 3)
与((2 == 2) != 3)
相同,而(1 != 3)
是正确的。int
值,因此不需要使用_Bool
(或将bool
与stdbool.h
一起使用。答案 2 :(得分:0)
==
和!=
来说,运算符优先级相同,因为它们都属于同一组相等运算符。为了区分具有相同优先级的运算符,我们使用该组的 operator关联性,在这种情况下,是从左到右。意味着保证2 == 2 != 3
被解析为(2 == 2) != 3
。这样我们得到:
2 == 2
-> 1
1 != 3
-> 1
值得注意的是,==
和!=
的优先级都高于=
,因此表达式= (2 == 2 != 3)
中的括号是不需要的(但如果您是不确定优先级)。
关于执行/评估的顺序,这是另一个术语,请勿与运算符优先级混淆。表达式中==
和!=
操作数的求值顺序未指定,这意味着我们不知道哪个将首先执行。
在这种情况下,这没有关系,但是如果我们有这个check = a() == b() != c();
,那就可以了。在这里,我们不知道首先执行的三个函数中的哪个。我们只知道运算符优先级表明a
的结果应该与b
的结果之前的c
的结果进行比较,但是函数c
可能仍被执行首先。