Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
上面程序的输出是2。但是为什么呢?请解释
是相同的
参考:Operator Precedence
现在,我们将其与三元运算符条件进行比较,如
计算第一个操作数;它的评估与
第二个或第三个操作数的求值(无论哪个被求值)。第二个操作数
仅当第一个比较不等于0时才进行评估;仅在以下情况下才对第三个操作数求值
第一个比较等于0;结果是第二个或第三个操作数的值
(以评估为准),
所以,就您而言
第一个操作数不等于零
因此,它评估第二个操作数,结果(操作数的值)被返回并存储到赋值运算符的LHS变量中。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
2年前关闭。
#include <stdio.h>
int main()
{
int a=-1?2:5 + 8?4:5;
printf("%d\n",a);
return 0;
}
上面程序的输出是2。但是为什么呢?请解释
最佳答案
编写易于理解的代码。 (至少,尝试...)
int a=-1?2:5 + 8?4:5;
是相同的
int a = (-1) ? 2 : ( 5 + ( 8 ? 4 : 5) );
参考:Operator Precedence
现在,我们将其与三元运算符条件进行比较,如
C11
第6.5.15章所述,计算第一个操作数;它的评估与
第二个或第三个操作数的求值(无论哪个被求值)。第二个操作数
仅当第一个比较不等于0时才进行评估;仅在以下情况下才对第三个操作数求值
第一个比较等于0;结果是第二个或第三个操作数的值
(以评估为准),
所以,就您而言
第一个操作数不等于零
因此,它评估第二个操作数,结果(操作数的值)被返回并存储到赋值运算符的LHS变量中。
关于c - C语言运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42786988/