(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。節省空間。