c语言 - 如果 x=10 y=10 z=5 x<y<z=true 如何?



我有这个问题,在答案中它说,由于从左到右的关联性,结果将是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。

相关内容

  • 没有找到相关文章

最新更新