2014-11-05 49 views
1

我无法理解为什么下面的代码段返回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 NOT下,移动到第二组括号。

  • x大于0 [logival和] 0,因此结果应该是'b'。

    (既是声明等同于真实的,不应该Result_if_true说法是输出?)

+0

'X> b && 0'装置'(X> B)&&(的static_cast (0))',而不是'(x> b)&&(x> 0)'。 – chris 2014-11-05 04:54:24

+0

因此,因为布尔值== 0,等于false。 逻辑T和F = F因此返回result_if_false? – Cirrus 2014-11-05 04:58:27

+0

是的,这是正确的。 – chris 2014-11-05 05:10:37

回答

1

x > b && 0意味着 “x大于b和0大”。

取而代之的是:“x大于b,0是真实的陈述”。 &&运算符是连接两个语句的逻辑AND。你不能以松散的方式在自然语言中使用“and”这个词。

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 
+0

完美,谢谢你清理这个。 – Cirrus 2014-11-05 04:59:42

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 

会有outputed

answer: 12 

你的逻辑错误在于表达

x > b && 0 

不等同于

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

它相当于

(x > b) && (0) 

作为表达

(0) 

等于false然后和

(x > b) && (0) 

等于false