2012-02-16 14 views
1

私は私の観点から、これはweard本当に、何かがタイプconvertationsと間違っていることを理解:これはない months.count == 00 <0 -1は真ですか?

ヶ月はので、私はそこにアイテム全くないNSArrayの です0 < 0 -1が当てはまるような作業ですか?

(0 < months.count -1) == true 

が、これは正常に動作し

(0 < (int)months.count -1) == false 

なぜいけませんか?

+0

例を簡略化することは、 '0 <0-1 == true'と' 0 <0-1 == false'ですか? – sarnold

+0

@sarnold - 実際、私はそうではないと思います。「0-1」が署名され、 'months.count -1'は符号なし – MByD

答えて

5

数が符号なしNSUIntegerを返すので、months.count -1は符号なしの表現で、正の数に評価され、署名としてので、大きな

あなたはint型にキャスト0よりも、表現(int)months.count -1が評価され、したがってNSArray documentationから0

+0

です。これはつまり、(unsigned)0 - (int)1 ==(unsigned) 0 ですが、なぜ(符号付き)0(符号なし)0が真ですか? –

+0

いいえ、どうしてそうなのですか? '=='はどこから来たのですか? – MByD

+0

'(signed)0 <(unsigned)0'は真ではなく、'(signed)0 <(unsigned)0 - 1'が真です。それらは完全に異なる表現である。 – MByD

1

よりも小さい、-1に等しく、我々はcount方法は、符号なし整数でNSUIntegerを返すことがわかります。符号なし0から1を引くことによって、実際に得ることのできる最大の符号なし整数で終わります。

+0

同じこと、なぜ(署名された)0 <(符号なし)0の基礎を忘れていますか? –

+0

@IgorR .:そうではありません。 0 == 0、型に関係なく。 –

関連する問題