2016-09-28 38 views
0
int j=4; 
(!j!=1)?printf("Welcome"):printf("Bye"); 

在上面的代码段的,根据我,第一将导致真正的和!true是假必须导致打印Bye但我得到Welcome作为输出。执行条件运算

任何人都可以解释这一个吗?

+0

查看[运算符优先级表](http://en.cppreference.com/w/c/language/operator_precedence)并自己回答。 –

+1

显然它应该写成'j ?? !! j!= 1? printf(“Welcome”):printf(“Bye”);'而是为了清晰。 – Lundin

+0

如果您将其中一个答案标记为答案,那该多好啊... – Charles

回答

2

!首先执行,因为一元运算符!的优先级高于!=

!4变成0然后0 != 1变成true。因此,输出为Welcome

2

!j!=1(!j)!=1而不是!(j!=1)

2

这是因为!(NOT)具有较高的比operator precedence所以!= ...

j = 4; // 4 
!j // 0 

在你的条件,所以 “欢迎” 印0 != 1将是真实的。

对于你想要的结果,你的病情必须是!(j!=1)