0

如果声明:我发现了一些奇怪的东西。为什么我的第二个“如果”等于否?

    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 和 trivial c int 之间也可能存在差异。

于 2012-05-11T14:40:33.720 回答