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

Moh*_*mer -3 c evaluation relational-operators

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

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

Vla*_*cow 8

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

所以这个声明

i = x < y < z;
Run Code Online (Sandbox Code Playgroud)

相当于

i = ( x < y ) < z;
Run Code Online (Sandbox Code Playgroud)

由于 x 小于 y 那么它也可以重写为

i = 1 < z;
Run Code Online (Sandbox Code Playgroud)

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

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

6 如果指定的关系为 true,则每个运算符 <(小于)、>(大于)、<=(小于或等于)和 >=(大于或等于)应产生 1,如果指定关系为 true,则每个运算符应产生 0为 false。107) 结果的类型为 int。

如果您将语句重写为

i = x < y && y < z;
Run Code Online (Sandbox Code Playgroud)

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