Абсолютное значение NSInteger

Обращение к Преобразование в абсолютное значение в Objective-C Мне интересно, есть ли функции для типов typedefed NS. Или abs(NSInteger) ладно? Это безопасно для архитектуры?

Ответы

Ответ 1

Используйте макрос ABS(), который определен в NSObjCRuntime.h, он безопасен для архитектуры.

Ответ 2

Вы можете использовать макрос Foundations ABS():

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

Ответ 3

В то время как два опубликованных ответа абсолютно правильны относительно использования макроса ABS(), следует, конечно, отметить, что NSIntegerMin, истинное абсолютное значение которого не может быть представлено как NSInteger, возвращает себя, когда функция ABS() называется.

Предполагая 64-битную систему:

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

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

Те же результаты будут происходить в 32-битной системе, но цифры будут +2147483647 и -2147483648