2013-01-05 149 views
0

我想看看是不是寫if (row > -1 && row < _rows)我可以將它縮短到if (-1 < row < _rows)。我用下面的測試來找出(它沒有返回任何編譯錯誤)。在AND語句或OR語句的if語句中有多個運算符

int x = 5; 
BOOL test1 = NO; 
BOOL test2 = NO; 
BOOL test3 = NO; 

if (x < 6 && x > 4) { 
    test1 = YES; 
} 
if (4 < x < 6) { 
    test2 = YES; 
} 
if (5 < x < 7) { 
    test3 = YES; 
} 

所有三個測試上前YES,其中包括一個第3,如果我的語法是正確的,應該已經NO。看起來這不是有效的語法,但我的問題是,編譯器在語法(5 < 5 < 7)返回true時實際上在做什麼?

+0

這會被定期詢問,但很難找到副本中的副本。 – dasblinkenlight

+0

要清楚,第二個和第三個if語句的語法並不真正有效。您必須正確使用'&&'像第一個'if'語句中那樣以正確的理由得到預期的結果。 – rmaddy

回答

3

我想這是因爲5 < x返回false,其造型爲0,如果你想讓它不使用邏輯與操作都小於7.

+1

第二個是由於類似的原因是真實的,不只是因爲x在4和6之間。首先'4 rmaddy

0

,這應該工作:

​​

評估爲1 == 1 == 1,即1 == 1,這是一個真實值。由於編譯器如何從左到右讀取,所以需要括號。

+1

不錯,或者'5 Raekye

+0

請不要寫這樣的代碼。我會從這樣的代碼中做噩夢。請寫出可讀的代碼。 – rmaddy

+1

@rmaddy對不起,我不是那樣寬容的寫代碼。這是非常難以理解和難以維護的。我只是這樣回答,因爲我只是想知道這樣的事情是否可能,所以我仔細研究了一下。以其他方式解決問題可能很有趣。 –