C 条件运算符的执行

C 条件运算符的执行,c,conditional,logical-operators,C,Conditional,Logical Operators,在上面的代码段中,根据我的说法,首先是j=1将导致true和!true为false,这必须导致打印Bye,但我得到Welcome作为输出 有人能解释一下吗?!j=1是(!j)=1,而不是!(j!=1)这是因为(非)的值高于=所以 int j=4; (!j!=1)?printf("Welcome"):printf("Bye"); 在您的情况下,0!=1将为真,因此打印“欢迎” 对于您想要的结果,您的条件必须是!(j!=1)逻辑NOT运算符的优先级高于不等于运算符= 因此,您的条件等价于(!j)!

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


有人能解释一下吗?

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

这是因为
(非)的值高于
=所以

int j=4;
(!j!=1)?printf("Welcome"):printf("Bye");
在您的情况下,
0!=1
将为真,因此打印“欢迎”


对于您想要的结果,您的条件必须是
!(j!=1)
逻辑NOT运算符
的优先级高于不等于运算符
=

因此,您的条件等价于
(!j)!=1)


请参见一元运算符“!”的优先级高于“!=”


阅读-。

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

!4
变成
0
然后
0!=1
变为


因此,输出是
Welcome

请查看并自己回答。显然,它应该写为
j??!!j=1.printf(“欢迎”):printf(“再见”)相反,为了清晰起见。如果您将其中一个答案标记为答案,那就太好了。。。
j = 4; // 4
!j // 0