我有这个问题,并在回答中说,由于从左到右的关联性,结果将为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;
}
Run Code Online (Sandbox Code Playgroud)
但是x在这里大于z,这怎么发生?
表达式x
(x < y) < z
Run Code Online (Sandbox Code Playgroud)
所以它变成
(10 < 10) < 5
Run Code Online (Sandbox Code Playgroud)
进一步评估为
0 < 5
Run Code Online (Sandbox Code Playgroud)
没错
我想您想要这样的东西:
x < y && y < z
Run Code Online (Sandbox Code Playgroud)
由于运算符优先级和结合性
i = x < y < z;
Run Code Online (Sandbox Code Playgroud)
被解析为:
i = ((x < y) < z);
Run Code Online (Sandbox Code Playgroud)
替换变量值后,这变为:
i = ((10 < 10) < 5);
Run Code Online (Sandbox Code Playgroud)
既然10 < 10是假的,这就变成了:
i = (0 < 5);
Run Code Online (Sandbox Code Playgroud)
既然0 < 5是真的,那就变成:
i = 1;
Run Code Online (Sandbox Code Playgroud)