如果x = 10 y = 10 z = 5 x <y <z = true

use*_*231 -1 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;
} 
Run Code Online (Sandbox Code Playgroud)

但是x在这里大于z,这怎么发生?

Bar*_*ski 5

表达式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)


Bar*_*mar 5

由于运算符优先级和结合性

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)