【问题标题】:zero is greater than or equal to zero evaluates to false零大于或等于零计算为假
【发布时间】:2017-07-20 12:50:40
【问题描述】:
i = 0;
if(0 <= i <= 0) 

这返回 false。

我完全不明白。 Watch window 当我单独测试它们时,我还尝试将语句读取为 (0 &lt;= i &amp;&amp; i &lt;= 0) 0 &lt;= i 返回 false 而 i &lt;= 0 返回 true。他们都应该是真的。我不确定这是否是一个精确的东西,但我不这么认为,因为我正在硬编码这些值。请帮助我理解这个基本问题。

如果它有帮助,我试图通过获取交点然后检查它是否在 x 和 y 起点和终点之间来评估一个点是否在一条线上。当我试图检查 x 或 y 何时在其轴上时,这会成为一个问题,然后您会遇到检查 0 是否在或等于 0 和 0 之间的问题。它会落在线上。

【问题讨论】:

  • 因为你必须写0 &lt;= i &amp;&amp; i &lt;=0。否则,它就像(0 &lt;= i) &lt;= 0,即(0 &lt;= i)首先被评估并给出true。 true 不等于 0,所以 true &lt;= 0 是 false
  • 感谢 Garf365。我想就是这样。这比我预期的要简单得多。现在应该去睡觉了。
  • @Garf365 确切地说,关系运算符返回类型int,值01。不是true
  • @user694733 感谢您的提及,我已经在回答中指出了相同的内容。
  • @CodyCannell 不要忘记接受答案 ;)

标签: c relational-operators


【解决方案1】:

关系运算符的链接是不可能的(按照预期产生一个有效的结果),您需要编写单独的指令来验证每个条件。

由于absence of explicit parenthesis and LTR association,这样的声明

  if(0 <= i <= 0) 

被评估为

  if( (0 <= i) <= 0) 

归结为

  if ( 1 <= 0)

产生 0, (FALSE)。

也就是说,与

有关的声明

当我单独测试它们时,我还尝试将语句读取为 (0 &lt;= i &amp;&amp; i &lt;= 0)0 &lt;= i 返回 false,而 i &lt;= 0 返回 true。他们都应该是真的

不正确,它们都是正确的See for yourself

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 2011-07-16
    • 2016-04-06
    • 2018-05-24
    • 1970-01-01
    • 2011-12-19
    • 2012-12-29
    • 1970-01-01
    相关资源
    最近更新 更多