参考在Objective-C中将值转换为绝对值,我想知道是否有用于NS typedefed类型的函数。或者abs(NSInteger)
可以吗?它是否适用于不同架构?
使用NSObjCRuntime.h中定义的ABS()宏,它是与架构无关的。
NSInteger a = 5;
NSInteger b = -5;
NSLog(@"%ld %ld", ABS(a), ABS(b));
MAX
和 MIN
已经好几年了,从来没见过 ABS
。知道了真好。 - Rob Napierabs()
函数不太好,因为它的参数是一个C int
,在OS X开发环境中通常是32位,而NSInteger与架构相同,即32位或64位。 - JeremyP虽然两个回答中使用ABS()
宏是完全正确的,但应该注意到NSIntegerMin
的真实绝对值无法表示为NSInteger
,当调用ABS()
函数时,它返回自身。
假设是64位系统:
NSLog(@"ld", ABS(NSIntegerMin));
// prints: -9223372036854775808
NSLog(@"%ld", ABS(NSIntegerMin + 1));
// prints: 9223372036854775807, which == NSIntegerMax
在32位系统上也会产生相同的结果,但数字将为+2147483647和-2147483648。