繁体   English   中英

C中棘手的三元操作

[英]Tricky Ternary Operation in C

 void calculate(){

  int x=3, y=3, z=1;

  printf("%d\n",z+=x<y ? 10:20 );

 }

上面的代码打印21。

我明白,首先,程序将评估x <y => 0,然后z = z + 0 = 1,不应该程序打印10,因为1是另一种形式的true。

该程序明确选择了第二个选项,并将其增加到21,有人可以解释一下吗?

条件运算符的优先级高于赋值运算符。

z+=x<y ? 10:20

被评估为

z+= (x<y ? 10:20)

您可以在此处获取C运算符优先级的摘要:

http://www.kernel.org/doc/man-pages/online/pages/man7/operator.7.html

首先,它评估x小于y。 由于x = 3且y = 3,这是假的,因此它的计算结果为20。

由于z已经= 1,你要加20:

z += 20

z = z + 20

z = 1 + 20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM