NSInteger的绝对值

时间:2011-09-06 14:03:48

标签: objective-c

参考Convert to absolute value in Objective-C我想知道NS typedefed类型是否有函数。或abs(NSInteger)好吗?它是架构安全的吗?

3 个答案:

答案 0 :(得分:64)

使用在NSObjCRuntime.h中定义的ABS()宏,它是架构安全的。

答案 1 :(得分:18)

您可以使用Foundation的ABS()宏:

NSInteger a = 5;
NSInteger b = -5;
NSLog(@"%ld %ld", ABS(a), ABS(b));

答案 2 :(得分:3)

虽然两个发布的答案对于使用ABS()宏绝对正确,但应该注意NSIntegerMin,其真实绝对值不能表示为NSInteger返回调用ABS()函数时。

假设一个64位系统:

NSLog(@"ld", ABS(NSIntegerMin)); 
// prints: -9223372036854775808

NSLog(@"%ld", ABS(NSIntegerMin + 1)); 
// prints: 9223372036854775807, which == NSIntegerMax

在32位系统上会出现相同的结果,但数字将为+2147483647和-2147483648