【问题标题】:execution of conditional operators条件运算符的执行
【发布时间】:2017-02-06 15:05:29
【问题描述】:
int j=4;
(!j!=1)?printf("Welcome"):printf("Bye");

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

谁能解释一下这个?

【问题讨论】:

  • 看看operator precedence table自己回答吧。
  • 为了清楚起见,显然应该写成j??!!j!=1? printf("Welcome"):printf("Bye");
  • 如果您将其中一个答案标记为答案,那就太好了...

标签: c conditional logical-operators


【解决方案1】:

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

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

所以,输出是Welcome

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      逻辑非运算符! 的优先级高于不等于运算符!=

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        对于您想要的结果,您的条件必须是!(j!=1)

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2013-07-13
            • 1970-01-01
            • 2015-05-15
            • 2013-05-10
            • 1970-01-01
            • 2021-08-15
            • 2017-12-03
            • 2013-03-22
            • 1970-01-01
            相关资源
            最近更新 更多