void calculate(){
int x=3, y=3, z=1;
printf("%d\n",z+=x<y ? 10:20);
}
上述代码打印21.棘手三元操作用C
我明白首先,程序将评估X < Y => 0,则z = Z + 0 = 1,不应该将程序打印10因为1是另一种形式的真实。
该程序明确地选择了第二个选项,它也增加到21,请问有人能解释一下吗?
void calculate(){
int x=3, y=3, z=1;
printf("%d\n",z+=x<y ? 10:20);
}
上述代码打印21.棘手三元操作用C
我明白首先,程序将评估X < Y => 0,则z = Z + 0 = 1,不应该将程序打印10因为1是另一种形式的真实。
该程序明确地选择了第二个选项,它也增加到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
-1为假情报(我不能downvote虽然)。条件运算符的优先级不会高于赋值。这就是为什么int x = 3,y = 5; x
kotlomoy
http://stackoverflow.com/questions/7499400/c-ternary-conditional-and-assignment-operator-precedence – kotlomoy
@kotlomoy首先,你不明白“造假”这个词的意思,其次你不明白你自己的引用。你是否甚至懒得读取ouah的引用,或语言标准,或C优先级的任何其他来源,所有这些都证实了条件运算符比赋值具有更高的优先级? –