执行条件运算符

时间:2016-09-28 14:44:28

标签: c conditional logical-operators

int j=4;
(!j!=1)?printf("Welcome"):printf("Bye");

在上面的代码段中,根据我的说法,第一个j!=1将导致为true,!true为false,这必须导致打印Bye,但我得到Welcome为输出。

有人可以解释一下吗?

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

这是因为!(NOT)的operator precedence高于!=所以......

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

在您的情况下,0 != 1将为真,因此会打印“欢迎”。

对于您期望的结果,您的病情必须是!(j!=1)

答案 2 :(得分:2)

Logical NOT运算符!的优先级高于Not Equal To运算符!=

所以你的条件相当于((!j) != 1)

请参阅https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence

答案 3 :(得分:2)

一元运算符'!'的优先级高于'!='

阅读 - https://www.tutorialspoint.com/cprogramming/c_operators_precedence.htm

答案 4 :(得分:2)

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

!4变为0,然后0 != 1变为true

因此,输出为Welcome