如果声明:我发现了一些奇怪的东西。为什么我的第二个'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
答案 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。
之间也可能存在差异