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

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

34 голосов
/ 06 сентября 2011

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

Ответы [ 3 ]

65 голосов
/ 06 сентября 2011

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

18 голосов
/ 06 сентября 2011

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

NSInteger a = 5;
NSInteger b = -5;
NSLog(@"%ld %ld", ABS(a), ABS(b));
3 голосов
/ 09 августа 2014

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

Предполагается, что 64-разрядная система:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...