int j=4;
(!j!=1)?printf("Welcome"):printf("Bye");
在上面的代码段的,根据我,第一将导致真正的和!true
是假必须导致打印Bye
但我得到Welcome
作为输出。执行条件运算
任何人都可以解释这一个吗?
int j=4;
(!j!=1)?printf("Welcome"):printf("Bye");
在上面的代码段的,根据我,第一将导致真正的和!true
是假必须导致打印Bye
但我得到Welcome
作为输出。执行条件运算
任何人都可以解释这一个吗?
!
首先执行,因为一元运算符!
的优先级高于!=
。
!4
变成0
然后0 != 1
变成true
。因此,输出为Welcome
。
!j!=1
是(!j)!=1
而不是!(j!=1)
。
这是因为!
(NOT)具有较高的比operator precedence所以!=
...
j = 4; // 4
!j // 0
在你的条件,所以 “欢迎” 印0 != 1
将是真实的。
对于你想要的结果,你的病情必须是!(j!=1)
。
逻辑NOT操作!
具有更高的优先级比不等于操作!=
所以你的情况相当于((!j) != 1)
见https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence
一元运算符'!'比'具有更高的优先权!'='。
阅读 - https://www.tutorialspoint.com/cprogramming/c_operators_precedence.htm。
查看[运算符优先级表](http://en.cppreference.com/w/c/language/operator_precedence)并自己回答。 –
显然它应该写成'j ?? !! j!= 1? printf(“Welcome”):printf(“Bye”);'而是为了清晰。 – Lundin
如果您将其中一个答案标记为答案,那该多好啊... – Charles