2014-11-05 81 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