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

时间:2012-05-11 14:35:23

标签: objective-c ios if-statement

如果声明:我发现了一些奇怪的东西。为什么我的第二个'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

3 个答案:

答案 0 :(得分:4)

NSArray的-count方法返回NSUInteger - 无符号整数。

bookSettings.tracks.count语句中使用if可能会导致表达式的两边都被转换为NSUInteger。即使_currentChapter - 1等于-1,作为无符号整数,它也是非常大数。所以你的轨道数明显少于那个非常大的整数,这就是if语句产生“no 2”的原因。

答案 1 :(得分:2)

我认为_currentChapter是一个NSUInteger。当您将其分配给b时,它将变为有符号整数,因此可以使用-1。但是,bookSettings.tracks.count是无符号整数,因为_currentChapter也是无符号整数,当你从_currentChapter(0,在这种情况下)中减去1时,它实际上变成了一个非常高的整数。

答案 2 :(得分:1)

您没有提到bookSettings.tracks.count的类型,如果数据类型或对象类型之间存在不匹配,则问题会变为true或false,if语句将相应地执行。 NSInteger和平凡的c int。

之间也可能存在差异