条件运算符的执行
execution of conditional operators
int j=4;
(!j!=1)?printf("Welcome"):printf("Bye");
在上面的代码段中,根据我的说法,第一个 j!=1
将导致 true 并且 !true
是 false 这必须导致打印 Bye
但我得到 Welcome
作为输出。
谁能解释一下这个?
!j!=1
是 (!j)!=1
,而不是 !(j!=1)
。
这是因为 !
(NOT)的 operator precedence 高于 !=
所以...
j = 4; // 4
!j // 0
在您的条件下,0 != 1
为真,因此打印 "Welcome"。
对于您想要的结果,您的条件必须是 !(j!=1)
。
逻辑非运算符 !
的优先级高于不等于运算符 !=
所以你的条件相当于((!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.
!
首先执行,因为一元运算符 !
的优先级高于 !=
.
!4
变成 0
然后 0 != 1
变成 true
.
因此,输出为 Welcome
。
int j=4;
(!j!=1)?printf("Welcome"):printf("Bye");
在上面的代码段中,根据我的说法,第一个 j!=1
将导致 true 并且 !true
是 false 这必须导致打印 Bye
但我得到 Welcome
作为输出。
谁能解释一下这个?
!j!=1
是 (!j)!=1
,而不是 !(j!=1)
。
这是因为 !
(NOT)的 operator precedence 高于 !=
所以...
j = 4; // 4
!j // 0
在您的条件下,0 != 1
为真,因此打印 "Welcome"。
对于您想要的结果,您的条件必须是 !(j!=1)
。
逻辑非运算符 !
的优先级高于不等于运算符 !=
所以你的条件相当于((!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.
!
首先执行,因为一元运算符 !
的优先级高于 !=
.
!4
变成 0
然后 0 != 1
变成 true
.
因此,输出为 Welcome
。