我只是想知道在以下情况下边界检查是如何工作的。
#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;
}
我试过从右到左/从左到右的优先顺序,但它似乎不起作用。 (虽然不太确定,也许是这样?)
我认为这是未定义的行为,使用 && 可能比弄清楚这一点更容易,但我对这背后的逻辑如何运作很感兴趣。如果有人能帮助解释这一点或指出我正确的方向,我将不胜感激
编辑:感谢所有的帮助!得到了我需要的答案。这对你们所有人来说一定是微不足道的,但它确实让我在过去几天里想到的很多事情都发生了变化。非常感谢你们花时间帮助我。再次感谢!
最佳答案
i < x < j
定义非常明确,但它并没有按照您的想法行事。
相当于(i < x) < j
, 由于 <
的结合性 .
但是(i < x)
是 0 或 1,因为这就是 关系 运算符在 C 中的定义方式。
因此,例如,如果 j
大于 1,则 i < x < j
始终为 1。
考虑写 i < x && x < j
相反。
关于c - 找出C中的整数比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37882192/