Reputation: 4519
Referring to Convert to absolute value in Objective-C I'm wondering if there are functions for NS typedefed types. Or is abs(NSInteger)
okay? Is it architecture-safe?
Upvotes: 35
Views: 9171
Reputation: 62052
While the two posted answers are absolutely correct about using the ABS()
macro, it should certainly be noted that NSIntegerMin
, whose true absolute value can not be represented as an NSInteger
returns itself when the ABS()
function is called.
Presuming a 64-bit system:
NSLog(@"ld", ABS(NSIntegerMin));
// prints: -9223372036854775808
NSLog(@"%ld", ABS(NSIntegerMin + 1));
// prints: 9223372036854775807, which == NSIntegerMax
The same results will happen on a 32-bit system, but the numbers will be +2147483647 and -2147483648
Upvotes: 3
Reputation: 4623
Use ABS() macro, which is defined in NSObjCRuntime.h, it is architecture-safe.
Upvotes: 66
Reputation:
You can use Foundation’s ABS() macro:
NSInteger a = 5;
NSInteger b = -5;
NSLog(@"%ld %ld", ABS(a), ABS(b));
Upvotes: 18