2011-12-09 14 views
2

考慮到所有三個變量的值相同,人們期待下面的比較導致YES:Objective-C將相同值的三向比較結果歸納爲NO - 爲什麼?

NSUInteger count1 = 2; 
NSUInteger count2 = 2; 
NSUInteger count3 = 2; 
BOOL countEqual = (count1 == count2 == count3); 
// but: countEqual = NO 

唉countEqual是NO,我想更好地理解爲什麼以及是否這個特殊的問題也出現在C或C++代碼?

我的猜測是:

(count1 == count2) --> YES (1) 
(YES == count3) or (1 == count3) --> NO (0) 
+2

這是一個速度打字比賽:) – dasblinkenlight

+0

LOL!應該有一個「Lucky Luke」徽章,用於在發佈後的10秒內回答問題! :) – LearnCocos2D

回答

4

其他海報已經給出了答案,所以我就引用規範的相關部分,確認它:

==(等於)和!=(不等於)運算符類似於關係運算符,但它們的優先級較低。如果指定的關係爲true,則每個運算符產生1,如果爲false,則每個運算符產生0。

平等是左結合的,所以它的解釋爲:

count1 == count2 == count3 
(count1 == count2) == count3 
(1) == count3 
0 
1

比較運營商,如==不一樣,在C和其他類似C語言。

變化:

BOOL countEqual = (count1 == count2 == count3); 

到:

BOOL countEqual = (count1 == count2 && count2 == count3); 
7

你的猜測是完全正確的,它會採取結果從第一次比較,並將其與第3個值。要做到這一點,你需要做的

countEqual = (count1 == count2) && (count1 == count3);

0

你猜對。第一個比較的結果與第三個值進行比較。這不是你想要的。

相關問題