目标c min max操作

时间:2015-07-07 15:25:51

标签: objective-c math

你能解释一下为什么这段代码:

NSInteger i = -1;
NSUInteger x = 1;
NSLog(@"min = %lu", MIN(i, x));
NSLog(@"max = %lu", MAX(i, x));;

打印 min = 1

max = 18446744073709551615

3 个答案:

答案 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