我有这个问题&在答案中它说,由于从左到右的关联性,结果将是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,所以这是怎么回事?
答案 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<y
(operator 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。