为什么以下if语句返回1(true )?
int main() {
short a = 1;
short b = 5;
short c = 4;
if (a<b<c)
printf("true \n");
else
printf("false \n");
return 0;
}
显然与
不同if(a<b && b<c)
因为这返回false。
谢谢
答案 0 :(得分:4)
关系运算符(<,<=,>,> =)从左到右读取(并具有相同的优先级),如您在此处看到的:Operator precedence。因此
a < b
首先评估。评估结果(然后为true或false)将参与下一次评估
(1 or 0) < c
基本上,您的代码与
相同 if ((a<b)<c)
答案 1 :(得分:2)
a<b
语句等于true或1
。因此我们可以说a<b
或1
小于c
。
printf(a<b); // result is 1
printf(1 < c) // result is true because 1 is less than 4
因此,该语句(a<b<c)
是true
答案 2 :(得分:2)
<
运算符具有从左到右的关联性。因此,您的表达式将解析如下:
(a<b)<c
因此,首先评估a<b
。由于a
小于b
,因此计算结果为true,即1。因此,您现在拥有:
1<c
由于c
为4,因此也是如此,因此最终结果为1。