user500
user500

Reputation: 4519

Absolute value of NSInteger

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

Answers (3)

nhgrif
nhgrif

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

Davyd Geyl
Davyd Geyl

Reputation: 4623

Use ABS() macro, which is defined in NSObjCRuntime.h, it is architecture-safe.

Upvotes: 66

user557219
user557219

Reputation:

You can use Foundation’s ABS() macro:

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

Upvotes: 18

Related Questions