0

If ステートメント : 何か変なものを見つけました。2 番目の「if」が no に等しいのはなぜですか?

    int a = bookSettings.tracks.count;
    int b = _currentChapter - 1;
    NSLog(@"a: %d", a);
    NSLog(@"b: %d", b);

    if (a > b) 
        NSLog(@"yes 1");
    else NSLog(@"no 1");        

    if (bookSettings.tracks.count > (_currentChapter -1)) 
        NSLog(@"yes 2");        
    else NSLog(@"no 2");   

とログ

a: 27
b: -1
yes 1
no 2
4

3 に答える 3

4

NSArray の-countメソッドはNSUInteger--符号なし整数を返します。

ステートメントでを使用bookSettings.tracks.countするifと、式の両側が としてキャストされる可能性がありますNSUInteger_currentChapter - 1-1 ですが、符号なし整数としては非常大きな数値です。したがって、トラック数は明らかにその非常に大きな整数よりも少ないため、if ステートメントは「no 2」を生成します。

于 2012-05-11T14:44:55.310 に答える
2

_currentChapter は NSUInteger だと思います。に割り当てるbと、符号付き整数になるため、-1 を使用できます。ただし、bookSettings.tracks.countは符号なし整数であり、 も符号なし整数であるため_currentChapter、_currentChapter (この場合は 0) から 1 を引くと、実際には非常に大きな整数になります。

于 2012-05-11T14:46:22.377 に答える
1

bookSettings.tracks.count のタイプについて言及しておらず、 datatypes または object-types の間に不一致がある場合、質問は true または false になり、それに応じて if ステートメントが実行されます。NSInteger と自明な c int の間にも違いがあるかもしれません。

于 2012-05-11T14:40:33.720 に答える