有人可以向我解释一下吗?
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。
答案 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
所以你必须做这个测试