【发布时间】:2011-08-05 10:02:55
【问题描述】:
众所周知,赋值运算符的结合性是从右到左,但是 在给定的代码中,如果我们从右到左,输出应该为零,但输出为 1。
main()
{
int a=3,b=2;
a=a==b==0;
printf("%d",a);
}
如果我们右转 letf,输出如何为 1??
如果我们从右到左,那么 (b==0) 应该首先被评估并给出结果 0,然后表达式 (a==0) 被评估也给出 0,最后 a 的值将是 0。
【问题讨论】:
-
如果您不理解在同一语句中使用的比较运算符,理解赋值运算符并不能帮助您。
-
谢谢Kerrek 我明白了
-
a == b == c 等同于 (a == b) == c ...
-
这与 Xcode 无关。任何合理的 IDE(并且根本没有任何 IDE)中的任何符合标准的 C 编译器都会产生相同(正确)的结果。另外,不,不是,但请阅读有关 C 运算符的 Wikipedia 文章。
-
@H2CO3 想说的是它不是未定义,因此编译器不能做任何它想做的事情。它被评估为
(equality_expression == equality_expression) == equality_expression,如规范中第 6.5.9 节中的状态,(以及 6.5.8 用于形成左侧部分的关系表达式)。我认为我的回答显示了一个简单的反例。
标签: c