如果x = 10 y = 10 z = 5 x是多少

时间:2014-01-18 10:11:43

标签: c compare

我有这个问题&在答案中它说,由于从左到右的关联性,结果将是1,这对于该陈述是正确的。这是代码。

#include<stdio.h>

int main ()
{
int i=0,x=10,y=10,z=5;
i=x<y<z;
printf("\n\n%d",i);

return 0;
} 

但是这里的x大于z,所以这是怎么回事?

5 个答案:

答案 0 :(得分:4)

表达式x

(x < y) < z

所以它变成了

(10 < 10) < 5

进一步评估为

0 < 5 

这是真的。

我想你想要这样的东西:

x < y && y < z

答案 1 :(得分:4)

由于运算符优先级和关联性

i = x < y < z;

被解析为:

i = ((x < y) < z);

替换变量值后,变为:

i = ((10 < 10) < 5);

由于10 < 10为false,因此变为:

i = (0 < 5);

由于0 < 5为真,因此变为:

i = 1;

答案 2 :(得分:2)

x<y<z不是一个有效的表达式。相反,它首先评估x<yoperator precedence从左到右完成)为真/假(在这种情况下为假,因为它们相等),将其转换为0的int值,然后将此值与z进行比较。

改为使用(x < y && y < z)

答案 3 :(得分:1)

首先评估x < y为假(0),然后0 < z为真(1)。

答案 4 :(得分:1)

C编译器做的是x<y<z; 从左开始,因此x不小于y因此它用'0'替换该表达式 所以它变成0<z,这是真的。它将变量设置为1。