我只是想知道在下列情况下边界检查是如何工作的。
#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;可能比想出这个更容易,但我对它背后的逻辑如何运作很感兴趣。如果有人能帮助解释这一点或指出我朝着正确的方向发展,我将不胜感激
编辑:嘿伙计们!感谢所有的帮助!得到了我需要的答案。这对你们所有人来说似乎都是微不足道的,但它确实让我在过去几天里想到的很多东西都被点击了。非常感谢你们帮助我的时间。再次感谢!答案 0 :(得分:3)
i < x < j
非常明确,但它并没有按照您的想法行事。
由于(i < x) < j
的关联性,它等同于<
。
但(i < x)
为0或1,因为关系运算符是如何在C中定义的。
因此,例如,如果j
大于1,则i < x < j
始终为1.
考虑改为编写i < x && x < j
。