c - 找出C中的整数比较

标签 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;
}

我试过从右到左/从左到右的优先顺序,但它似乎不起作用。 (虽然不太确定,也许是这样?)

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

编辑:感谢所有的帮助!得到了我需要的答案。这对你们所有人来说一定是微不足道的,但它确实让我在过去几天里想到的很多事情都发生了变化。非常感谢你们花时间帮助我。再次感谢!

最佳答案

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/

相关文章:

c# - C和C#之间的RSA加密

C:换行十六进制值

c - c中的二进制搜索算法

c - 为什么在 glibc 中使用 crypt 会导致编译器警告?

c++ - 如何确定哪个动态库负责创建指针?

C语法问题

c - 从缓冲区读取字节(字符)

c - 获取字符串c

c - C : remove node function 中的二叉搜索树

objective-c - 如何释放通过引用传递给 c 代码并且其成员已分配到那里的结构?