2011-09-06 434 views

回答

60

使用ABS()宏,這是在NSObjCRuntime.h定義,它是建築安全。

+0

贏得NSObjCRuntime.h提示。謝謝。 – user500

17

您可以使用基金會的ABS()宏:

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

+1我一直在使用'MAX'和'MIN'多年,從未見過'ABS'。很高興知道。 –

+1

我從來不知道:+1。無論如何,來自C庫的'abs()'*函數*並不是OK,因爲它的參數是C'int',它通常是OS X dev環境中的32位,而NSInteger與體系結構的寬度相同,即32或64位。 – JeremyP

3

儘管這兩個貼答案是有關使用ABS()宏絕對正確的,它當然應該指出的是NSIntegerMin,其真正的絕對值不能表示爲NSInteger回報本身當ABS()函數被調用。

。假定一個64位系統:

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

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

同樣的結果會發生在32位系統上,但該數字將+2147483647和-2147483648