C:if(a <b <c)会做什么?=“”

时间:2019-02-18 14:08:56

标签: c

=“”

为什么以下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。

谢谢

3 个答案:

答案 0 :(得分:4)

关系运算符(<,<=,>,> =)从左到右读取(并具有相同的优先级),如您在此处看到的:Operator precedence。因此

a < b
首先评估

。评估结果(然后为true或false)将参与下一次评估

(1 or 0) < c

基本上,您的代码与

相同
 if ((a<b)<c)

答案 1 :(得分:2)

a<b语句等于true或1。因此我们可以说a<b1小于c

printf(a<b);    // result is 1
printf(1 < c)   // result is true because 1 is less than 4

因此,该语句(a<b<c)true

try online

答案 2 :(得分:2)

<运算符具有从左到右的关联性。因此,您的表达式将解析如下:

(a<b)<c

因此,首先评估a<b。由于a小于b,因此计算结果为true,即1。因此,您现在拥有:

1<c

由于c为4,因此也是如此,因此最终结果为1。