1. 程式人生 > >(iOS-基本知識)int long NSInteger 入門與相容問題講解

(iOS-基本知識)int long NSInteger 入門與相容問題講解

系統區別

在32位系統中

int 佔4個位元組 

long 佔4個位元組 

NSInteger 是int的別名,佔4個位元組 

long long 佔8個位元組 

int32_t 是int的別名,佔4個位元組 

int64_t 是long long的別名,佔8個位元組

在64位系統中

int 佔4個位元組 

long 佔8個位元組 

NSInteger 是long的別名,佔8個位元組 

long long 佔8個位元組 

int32_t 是int的別名,佔4個位元組 

int64_t 是long long的別名,佔8個位元組

由於long和NSInteger的位元組數變了,所以在相容的時候可能會導致溢位

變數範圍

4位元組的整數變數,它的範圍是 

-2147483648 ~ 2147483647 

如果不帶符號,它的範圍是 

0 ~ 4294967295 

8位元組的整數變數,它的範圍是 

-9223372036854775808 ~ 9223372036854775807 

如果不帶符號,它的範圍是 

0 ~ 18446744073709551615

所以對於一個11位的整數,它在64位系統中使用NSInteger或者long型別,是可以正常儲存的 

如果是在32位系統中,它就溢位了 

要保證某些較大的整數可以正常使用,那麼就需要使用long long或者int64_t這樣的型別

另外在型別轉換的時候 

例如 int64_t轉換成NSInteger,在64位系統中是正常的 

但在32位系統中就可能會導致溢位

總結:

在相容32位和64位系統,使用int, long long(或者int32_t,int64_t)這樣的資料型別比使用NSInteger可靠得多

補充:考慮最大範圍,較大的使用long long;較小的NSInteger。節省空間。