3

谁可以给我解释一下这个 ?

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。

4

3 回答 3

6

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

更详细一点。如果将无符号整数与有符号整数进行比较,则有符号整数将被解释为无符号整数。因此,您签署的 -1 值将被解释为 4294967295。

于 2013-08-21T12:11:00.163 回答
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.
于 2013-08-21T12:14:05.693 回答
0

这个

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

输出4294967295和 0 <= 4294967295 为真。

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

于 2013-08-21T12:25:20.820 回答