我有这个问题,在答案中它说,由于从左到右的关联性,结果将是1,对于这个陈述是正确的。这是代码。
#include<stdio.h>
int main ()
{
int i=0,x=10,y=10,z=5;
i=x<y<z;
printf("nn%d",i);
return 0;
}
但是这里的x大于z,那么这是怎么发生的呢?
表达式 x
(x < y) < z
所以它变成了
(10 < 10) < 5
进一步评估为
0 < 5
这是真的。
我想你想要这样的东西:
x < y && y < z
由于运算符优先级和关联性
i = x < y < z;
解析为:
i = ((x < y) < z);
替换变量值后,这将变为:
i = ((10 < 10) < 5);
由于10 < 10
是假的,这变成了:
i = (0 < 5);
既然0 < 5
是真的,那就变成了:
i = 1;
x<y<z
不是单个有效的表达式。相反,它首先将x<y
(运算符优先级从左到右完成)评估为真/假(在本例中为假,因为它们相等),将其转换为 0
的 int 值,然后将该值与 z
进行比较。
请改用(x < y && y < z)
。
它首先计算x < y
为假 (0),然后0 < z
为真 (1)。
WHat C 编译器所做的是,在 x<y<z
;从左开始,因此由于 x 不小于 y,因此它将该表达式替换为"0"所以它变得0<z
,这是真的。它将变量设置为 1。