你能解释一下为什么这段代码:
NSInteger i = -1;
NSUInteger x = 1;
NSLog(@"min = %lu", MIN(i, x));
NSLog(@"max = %lu", MAX(i, x));;
打印 min = 1
max = 18446744073709551615
答案 0 :(得分:1)
您可以比较两种不同的类型:signed(NSInteger)和unsigned(NSUInteger)。 MIN / MAX将全部转换为无符号整数。
此外,负的NSInteger使用%lu而不是%du打印。因此,请看一个大数字。
NSInteger i = -1;
NSUInteger x = 1;
NSLog(@"min = %ld", MIN(i, (NSInteger)x));
NSLog(@"max = %ld", MAX(i, (NSInteger)x));
答案 1 :(得分:0)
这是因为i
实际上是隐式转换为unsigned int的。见here。结果它翻到18446744073709551615。
答案 2 :(得分:0)
这是因为我被隐式转换为无符号长。这是xcode处理整数转换的方式的一部分。这是一篇类似的帖子。 NSUInteger vs NSInteger, int vs unsigned, and similar cases