c如何评估小于和大于表达式?

how does c evaluate less than and more than expretion?

我想知道这段C语言代码中i是如何求值的?

    int x = 10, y = 20, z = 5, i;
    i = x < y < z;
    printf("%d\n",i);

如果条件为真,关系运算符的结果为整数 1,否则为 0。关系运算符从左到右计算。

所以这个声明

i = x < y < z;

相当于

i = ( x < y ) < z;

并且因为 x 小于 y 那么它也可以重写为

i = 1 < z;

将变量i初始化为1,因为1小于5。

来自 C 标准(6.5.8 关系运算符)

6 Each of the operators < (less than), > (greater than), <= (less than or equal to), and >= (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is false.107) The result has type int.

如果你将语句重写为

i = x < y && y < z;

那么表达式的结果将等于 0,因为 y 不小于 z。