#include<stdio.h>
main()
{
int x = 5, y = 10, z = 10;
x = y == z; // This computational expression causes the value of x to be 1. I fail to understand why
printf("%d\n", x); //Why is the value of x 1 here.
}
我无法理解陈述x = y ==z;
根据我 - x = 10,因为y == z。 z = 10并且声明等于y。然后将y的值分配给x - x = y
答案 0 :(得分:3)
您将比较结果»y
等于z
«至x
,即1
,即为真。
请注意不同的运营商:
x = ... // assignment
y == z // comparison with either 0 (false) or 1 (true) result
让我们进一步打破这个程序:
x
初始化为5,将y
和z
初始化为10。y
和z
的比较(见上文)而不关心结果。这是一条可以安全忽略的线。但由于1
等于y
。z
x
。 x
现在的值为{y
等于z
«,在这种情况下为1
。答案 1 :(得分:3)
由于运算符优先级
x = y == z;
与
相同x = (y == z);
现在y == z
评估为1
,因此x
值在1
之后为{{1}}。
答案 2 :(得分:2)
y == z如果相同则返回1,如果不相同则返回0,并将其结果设置为x
答案 3 :(得分:2)
==
是一个比较运算符,如果两个操作数相等则返回1(true),如果不相等则返回0(false)。
声明x = y == z
等同于x = (y == z)
,因为==
的优先级高于=
。因为y等于z,所以这会将1
分配给x。
答案 4 :(得分:1)
请参阅Operator Precedence Table。 ==
(比较运算符)的优先级高于=
(赋值运算符)。因此,首先执行y == z,然后将结果1作为y,并且z具有相同的值,这将导致x被赋值为1.
答案 5 :(得分:1)
=
是赋值运算符,==
是比较运算符。您比较y
和z
,它们是相等的,因此比较返回true,即1.此值已分配给x
。
答案 6 :(得分:1)
==
运算符首先执行。
因此它变成x =(y == z的值);
现在因为y和z是相同的,所以y == z的值是1,它被赋值给x。
答案 7 :(得分:0)
==
的优先级高于=
。
y == z
的评估结果为1
。x = y == z
将1
放入x
。printf("%d\n", x);
打印x
(1
)的值。答案 8 :(得分:0)
==
运算符的优先级高于=
运算符。
y == z评估为1;因为两者都是平等的。
Thisn值被赋值给x。