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)
如果条件为真,关系运算符的结果为整数 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。