使用多个大于运算符的布尔逻辑评估

时间:2014-10-02 11:34:51

标签: c

我有以下代码片段:

#include <stdio.h>

int main(void) {
    int x=3, y=4, z=6;

    if (x < y < z) {
        z = z+1;
        printf("This if statement got hit. Value of z is %d\n", z);
    }

    if (z > y > x) {
        printf("This if statement got hit. Value of z is %d", z);
        z = z+2;
    }

    printf("Values: x=%d y=%d z=%d\n", x, y, z);
}

正如我所料,第一个if语句的计算结果为true。 z递增。但是,第二个if语句不会评估为真。在我看来,逻辑是相反的,并且条件也应该被评估为真。最终的printf输出Values: x=3 y=4 z=7。我期待Values: x=3 y=4 z=9

有人能说清楚为什么会这样吗?

干杯。

1 个答案:

答案 0 :(得分:4)

从左到右评估。你可以写:(x x)>收率

如果为假或真,则

(x

为了得到你想要的东西,你应该写:

if((x&gt; y)&amp;&amp;(y&gt; z))

if((z&lt; y)&amp;&amp;(y&lt; x))