为什么我不能比较新阵列的数量?

时间:2013-08-21 12:07:43

标签: ios objective-c if-statement nsarray

有人可以向我解释一下吗?

if(0 <= -1)
    NSLog(@"Thank god");
if([NSArray new].count <= -1)
    NSLog(@"What the **** ? %i", [NSArray new].count);
if([[NSArray alloc] init].count <= -1)
    NSLog(@"What the **** ? %i", [[NSArray alloc] init].count );

输出是What the **** ? 0的两倍,我期待没有输出,我希望计数为0。

如果我将计数放入int或记录它,则输出0(零),但if语句在此处生成true。

3 个答案:

答案 0 :(得分:6)

问题是您是将无符号整数与有符号整数进行比较。

更多细节。如果将无符号整数与有符号整数进行比较,则有符号整数将被解释为无符号整数。所以你签名的值-1将被解释为4294967295。

答案 1 :(得分:0)

signed int i=-1;

    if(0 <= i)
        NSLog(@"Thank god");
    if([NSArray new].count <= i)
        NSLog(@"What the **** ? %i", [NSArray new].count);
    else if([[NSArray alloc] init].count <= i)
        NSLog(@"What the **** ? %i", [[NSArray alloc] init].count );

Try this.

答案 2 :(得分:0)

这一个

NSLog(@"%u", -1);

输出4294967295且0 <= 4294967295为真。

尝试测试较低的零,而不是测试较低的等于-1。一样的。但是XCode说Comparison of unsigned expression < 0 is always false所以你必须做这个测试