2011-12-09 7 views
2

同じ値のObjective-C 3ウェイ比較結果はNOですか?なぜですか?すべての3つの変数が同じ値を持って、1は以下の比較はYESをもたらすことが期待されることを考えると

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です!投稿後10秒以内に質問に答えるための「Lucky Luke」バッジが必要です。 :) – LearnCocos2D

答えて

4

他のポスターは、すでに答えを提供してきたので、私はそれを確認仕様の関連部分を引用するだけでしょう:

==(に等しい)と!=(等しくない)演算子は、優先順位の低いものを除き、関係演算子に似ています。演算子のそれぞれは、指定された関係が真である場合は1を返し、偽の場合は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

あなたの推測が正確に正しいですが、それは最初の比較から結果を取り、第三値と比較します。これを行うには、あなたが右推測している

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

0

を行う必要があります。最初の比較の結果は3番目の値と比較されます。これはあなたがここで欲しいものではありません。

関連する問題