2011-09-06 37 views

Trả lời

60

Sử dụng ABS() vĩ mô, được định nghĩa trong NSObjCRuntime.h, đó là kiến ​​trúc an toàn.

+0

Won cho NSObjCRuntime.h gợi ý. Cảm ơn. – user500

17

Bạn có thể sử dụng ABS Foundation() vĩ mô:

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

1 Tôi đã sử dụng 'MAX' và' MIN' trong nhiều năm và không bao giờ thấy 'ABS'. Tốt để biết. –

+1

Tôi không bao giờ biết rằng: +1. Dù sao, hàm 'abs()' * từ thư viện C không được OK vì tham số của nó là một '' int' thường là 32 bit trong môi trường dev OS X trong khi NSInteger có cùng chiều rộng với kiến ​​trúc 32 hoặc 64 bit. – JeremyP

3

Trong khi hai câu trả lời đăng tải là hoàn toàn chính xác về việc sử dụng ABS() vĩ mô, nó chắc chắn cần lưu ý rằng NSIntegerMin, mà đúng tuyệt đối giá trị không thể được biểu diễn như một NSInteger lợi nhuận riêng của mình khi hàm ABS() được gọi.

Giả sử một hệ thống 64-bit:

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

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

Các kết quả tương tự sẽ xảy ra trên một hệ thống 32-bit, nhưng những con số sẽ là 2147483647 và -2147483648

Các vấn đề liên quan