与C中的赋值运算符的相关性混淆

Ami*_*mar 3 c

众所周知,赋值运算符的关联性是从右到左,但如果我们从右到左但输出为1,则在给定代码中输出应为零.

 main()
 {
 int a=3,b=2;
 a=a==b==0;
 printf("%d",a);
 }
Run Code Online (Sandbox Code Playgroud)

如果我们通过权利letf,输出如何变为1?

如果我们从右到左,那么(b == 0)应首先评估并给出结果0然后表达式(a == 0)是Evaluated也给出0,最后a的值将为0.

Lin*_*een 7

赋值是RTL完成的,但是equality(==)不是.

声明实际上是:

a = ((a == b) == 0)
Run Code Online (Sandbox Code Playgroud)

分配的右侧从左到右进行评估.在步骤中,这是正在发生的事情:

  1. a == b0
  2. 0 == 01
  3. 1 分配给 a

  • @Amit:*比较*运算符从左到右!对于*assignment*运算符的一个很好的例子,你应该考虑`a = b = c = 1;`. (3认同)