2015-08-15 175 views
0

我碰到這個謎語前幾天來到爲什麼(1 <1 <1)在C++中返回true?

main() 
{ 
    cout << (1 < 1 < 1 ? "true" : "false") << endl; 
} 

我不能想通了,爲什麼在地球上,則返回true。我期待假的。

更:

cout << (2 < 2 < 2 ? "true" : "false") << endl; // returns true 
cout << (0 < 0 < 0 ? "true" : "false") << endl; // returns false 
cout << (-1 < -1 < -1 ? "true" : "false") << endl; // returns false 
cout << (-2 < -2 < -2 ? "true" : "false") << endl; // returns false 

它似乎返回值嚴格大於0,否則爲false更大如此。

任何人都有對此的解釋?由於事先

+3

我確定這是一個重複的問題。但是這是因爲(1 <1)<1'爲真,並且'(0 <0)<0'爲假。由於'1 <1'爲假,'false <1'爲真。 –

+0

我記得聽說過一種語言,其中x john

+1

@john可能是python。 – juanchopanza

回答

2

表達1 < 1 < 1被解析爲

(1 < 1) < 1 

這裏,1 < 1false,將其轉化爲0,得到

(0) < 1 

這是真實的。

+0

Downvoter(或其他人):這個答案有什麼問題?如果出現問題,我很樂意將其刪除。 – juanchopanza

2

1 < 1 < 1被解析爲(1 < 1) < 1。因此,從左邊....

1 < 10(假)

0 < 11(真)

1 ? "true" : "false""true"

依此類推。

當然,real這裏的教訓是這樣的代碼在真實世界的程序中沒有位置。你應該努力提高可讀性...

1

,首先考慮到的是,根據整體轉換

如果源類型是布爾,值false被轉換成零和 true值是轉換爲一個。

關係運算符<組從左到右。因此,這種表達

1 < 1 < 1 

可以這樣寫

(1 < 1) < 1 

子表達式

1 < 1 

產生false

所以其評估後的表情看起來就像

false < 1 

,能轉化爲

0 < 1 

並且作爲結果產生true

作爲例如該表達式

0 < 0 < 0 

,它等效於

(0 < 0) < 0 

然後

0 < 0 

產生false的方式作爲用於在前面的例子相同。你會得到

false < 0 

,反過來轉化爲

0 < 0 

,並再次產生false

在情況下,當負的整數值被用作例如

-1 < -1 < -1 

然後

-1 < -1 

產生false。在這個表達式

false < -1 

假轉換成0

0 < -1 

,並再次獲得false

+0

感謝Vlad的詳細解釋 –

0
  • (1 1)將返回true,因爲

    內部編譯器進行分組,如((1 < 1)< 1)

    所以,首先將執行,

    (1<1) 
    

    上述條件成爲假所以它將設置0

  • 所以新的條件是(0 < 1)

    (0<1) 
    

    其將成爲真實的,所以它會迴歸真實。