在C中计算出整数比较

时间:2016-06-17 12:58:59

标签: c

我只是想知道在下列情况下边界检查是如何工作的。

#include <stdio.h>
#include <stdint.h>

int main(void)
{
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            for (int x = 0; x < 3; x++) {
                printf("%d < %d < %d is %d\n", i, x, j, i < x < j);
            }
        }
    }
    return 0;
}

我尝试了从右到左/从左到右的优先级,但它似乎不起作用。 (虽然不太确定,也许确实如此?)

我认为这是未定义的行为并使用&amp;&amp;可能比想出这个更容易,但我对它背后的逻辑如何运作很感兴趣。如果有人能帮助解释这一点或指出我朝着正确的方向发展,我将不胜感激

编辑:嘿伙计们!感谢所有的帮助!得到了我需要的答案。这对你们所有人来说似乎都是微不足道的,但它确实让我在过去几天里想到的很多东西都被点击了。非常感谢你们帮助我的时间。再次感谢!

1 个答案:

答案 0 :(得分:3)

i < x < j非常明确,但它并没有按照您的想法行事。

由于(i < x) < j关联性,它等同于<

(i < x)为0或1,因为关系运算符是如何在C中定义的。

因此,例如,如果j大于1,则i < x < j始终为1.

考虑改为编写i < x && x < j