【问题标题】:figuring out integer comparison in C找出C中的整数比较
【发布时间】:2016-06-17 12:58:59
【问题描述】:

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

#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;
}

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

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

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

【问题讨论】:

  • 标题不会误导吗?整数边界与此有什么关系?
  • 我把它读作“你如何检查整数 x 是否在 i 和 j 之间”。
  • printf("%d &lt; %d &lt; %d is %d\n", i, x, j, (i &lt; x)&amp;&amp;(x &lt; j));
  • 为误导性的标题道歉!我对此很陌生,所以我真的不知道要使用什么术语。在那个时候,这个标题对我来说似乎是一个不错的选择。也许您可以澄清使用整数边界的正确上下文?我真的很感激你的帮助,这样我就不会再犯同样的错误了。反正现在不知道怎么改。找不到可以编辑标题的地方。对不起!

标签: c


【解决方案1】:

i &lt; x &lt; j 是完美定义的,但它并没有像你想象的那样做。

由于&lt;关联性,它等同于(i &lt; x) &lt; j

(i &lt; x) 是 0 或 1,因为这就是 C 中定义 关系 运算符的方式。

因此,例如,如果 j 大于 1,则 i &lt; x &lt; j 始终为 1。

考虑改写i &lt; x &amp;&amp; x &lt; j

【讨论】:

    猜你喜欢
    • 2022-06-22
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多