众所周知,赋值运算符的关联性是从右到左,但如果我们从右到左但输出为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.
赋值是RTL完成的,但是equality(==)不是.
声明实际上是:
a = ((a == b) == 0)
Run Code Online (Sandbox Code Playgroud)
分配的右侧从左到右进行评估.在步骤中,这是正在发生的事情:
a == b 是 00 == 0 是 11 分配给 a