Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过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/

10-14 13:31
查看更多