条件运算符错误

时间:2014-11-05 04:50:34

标签: c++ operators

我无法理解为什么以下代码部分返回x而不是b。

#include <iostream>

using namespace std;

int main()
{
    int x = 12;
    int a = 1;
    int b = 0;

    cout << "answer: " << (x < a && 1 ? a : (x > b && 0 ? b : x)) << endl;
    return 0;
}

我的工作是:

  • x不低于[逻辑和] 1,移动到第二组括号。

  • x大于0 [logival和] 0,因此结果应该是&#39; b&#39;。

    (因为两个语句都等于true,不应该将Result_if_true语句作为输出吗?)

3 个答案:

答案 0 :(得分:1)

x > b && 0 意味着&#34; x大于b和0&#34;。

相反,它意味着:&#34; x大于b,0是真实的陈述&#34;。 &&运算符是连接两个语句的逻辑AND。你不能以松散的方式使用它,而#34;和&#34;用于自然语言。

答案 1 :(得分:1)

(x < a && 1 ? a : (x > b && 0 ? b : x))

被解析为

((x < a) && 1) ? a : (((x > b) && 0) ? b : x)

相同
(false && true) ? a : ((true && false) ? b : x)

false ? a : (false ? b : x)

x

答案 2 :(得分:0)

在此表达式中

(x < a && 1 ? a : (x > b && 0 ? b : x)) 

首先是评估条件

x < a && 1

它等于false,因为x不小于a。

所以下一个要评估的表达式是

(x > b && 0 ? b : x)

在此表达式条件

x > b && 0

显然等于false

因此整个表达式的值将是子表达式的值

x

并且会出现

answer: 12

你的逻辑错误是表达

x > b && 0

不等于

( x > b ) && ( x > 0 )

等同于

( x > b ) && ( 0 )

作为表达

( 0 )

等于false然后

( x > b ) && ( 0 )

等于false