【问题标题】:if x=10 y=10 z=5 how is x<y<z=true? [duplicate]如果 x=10 y=10 z=5 x<y<z=true 怎么办? [复制]
【发布时间】:2014-01-18 10:11:42
【问题描述】:

我有这个问题 & 在答案中它说由于从左到右的关联性,结果将是 1,这对于这个陈述是正确的。这是代码。

#include<stdio.h>

int main ()
{
int i=0,x=10,y=10,z=5;
i=x<y<z;
printf("\n\n%d",i);

return 0;
} 

但是这里的 x 比 z 大,这是怎么回事?

【问题讨论】:

  • x
  • 你想做什么?你能详细说明一下吗。
  • 在考试中被问到,我想弄清楚这是怎么回事@DakshShah
  • (x&lt;y => 10 &lt; 10 => 0) => 0 &lt; z => 0 &lt; 5 => 真,改成x &lt; y &amp;&amp; y &lt; z
  • 我认为我们需要更多的人来展示相同的答案,在至少有十几个人之前,OP 肯定不会达成共识。

标签: c compare


【解决方案1】:

表达式 x

(x < y) < z

原来如此

(10 < 10) < 5

进一步评估为

0 < 5 

这是真的。

我想你想要这样的东西:

x < y && y < z

【讨论】:

  • 他不“想要”任何东西,他说这是一个考试题,询问为什么原始代码有这种行为。
【解决方案2】:

由于运算符优先级和结合性

i = x < y < z;

被解析为:

i = ((x < y) < z);

代入变量值后,变为:

i = ((10 < 10) < 5);

由于10 &lt; 10 为假,因此变为:

i = (0 < 5);

既然0 &lt; 5 为真,那就变成:

i = 1;

【讨论】:

    【解决方案3】:

    x&lt;y&lt;z 不是一个有效的表达式。相反,它首先评估x&lt;yoperator precedence 在此处从左到右完成)为真/假(在这种情况下为假,因为它们相等),将其转换为 0 的 int 值,然后比较该值z

    请改用(x &lt; y &amp;&amp; y &lt; z)

    【讨论】:

      【解决方案4】:

      它首先评估 x &lt; y 为假 (0),然后0 &lt; z 为真 (1)。

      【讨论】:

        【解决方案5】:

        C 编译器所做的是,x&lt;y&lt;z; 从左边开始,所以 x 不小于 y 因此它用 '0' 替换那个表达式 所以它变成了0&lt;z,这是真的。它将变量设置为 1。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-07
          • 1970-01-01
          • 2013-02-26
          • 1970-01-01
          • 1970-01-01
          • 2012-05-27
          相关资源
          最近更新 更多