一、思維導(dǎo)圖

基本數(shù)據(jù)類型思維導(dǎo)圖
二、基本數(shù)據(jù)類型幾個字節(jié)
具體代碼:https://github.com/lionsom/LXInt_NSInt_Test/tree/master
- 所占字節(jié)
int = 100 size = 4 byte
float = 1.100000 size = 4 byte
double = 2.200000e+00 size = 8 byte
short int = 200 size = 2 byte
long long = 1233223 size = 8 byte
bool = 1 size = 1 byte

補充
- 取值范圍
舉例:int
1Byte = 8bit
int = 4Byte = 32bit = 32個0和1
有符合第一位 0 正 1 負(fù)
范圍:-2(32-1) ~ 2(32-1)-1 注:最后正數(shù)-1,是因為從0開始。
三、如何知道電腦是多少位的?
3.1、32位、64位是指什么?與操作系統(tǒng)關(guān)系?
- 32位和64位一般是指CPU的通用寄存器位寬,所以64位的CPU位寬增加一倍
- 可尋址范圍大大擴展,32位系統(tǒng)支持最大內(nèi)存位4G,64位系統(tǒng)理論支持最大內(nèi)存2^64=18446,744,073,709,551,616,約1600萬TB,相當(dāng)于16EB。(實際還受制于操作系統(tǒng)和主板約束),實際的CPU尤其是這兩年的CPU都是采取兼容設(shè)計的,內(nèi)部總線不到64位,后期的CPU逐漸都會采用標(biāo)準(zhǔn)的64位。
- 32位系統(tǒng)和64位系統(tǒng)需要安裝支持相應(yīng)系統(tǒng)模式下的操作系統(tǒng)和驅(qū)動軟件,也就是32位只能安裝32位,64位安裝64位的但可兼容32位運算。
3.2、iPhone操作系統(tǒng)是多少位??
- iPhone5以及5之前都是32位,iPhone5S及以后全面升級64位
- 測試:使用模擬器進(jìn)行測試
- iPhone5 環(huán)境下:long == int == 4 Byte
- iPhone7 環(huán)境下:long == 8 Byte
3.3、區(qū)分方法
-
區(qū)分32位和64位方法
利用long 在不同操作系統(tǒng)中所占字節(jié)不同。 long在32位操作系統(tǒng)中占4Byte long在64位操作系統(tǒng)中占8Byte -
讀取寄存器長度
具體操作可看:http://m.itdecent.cn/p/2c6bf64887c7-
iPhone5環(huán)境下:
如圖可查看到寄存器"eax = 0x000e944c",由于16進(jìn)制中的1位 = 4bit,得出 “ 8位數(shù) * 4bit = 32bit ”
iPhone5 讀取寄存器 -
iPhone7環(huán)境下:
同上可以得出結(jié)論 “ 8位數(shù) * 8bit = 64bit ”
iPhone7 讀取寄存器
-
四、如何知道電腦大小端模式?
參考文件:http://blog.csdn.net/ce123_zhouwei/article/details/6971544
-
名詞解釋
大端模式:是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的低地址中,而低子節(jié)數(shù)據(jù)保存在內(nèi)存的高地址中。 小端模式:是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的高地址中,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的低地址中。 -
為什么會有大小端模式?
處理器(例如32位或者64位的cpu)的發(fā)展。 ARM芯片(iPhone)默認(rèn)采用小端。 驗證方式1:(強轉(zhuǎn))
short int a = 0x1122; // 十進(jìn)制為4386,其中11稱為高子節(jié)(即15~8位)。
char b = ((char *)&a)[0]; // 取變量a的低子節(jié)(即7~0位)
printf("%x", b); // 輸出22代表編譯器為小端模式
- 驗證方式2:(便于理解)
int num = 0x12123678; // 十進(jìn)制為305419896
char a = num & 0xff; // 取(0 ~ 7位)一個子節(jié)
char b = num >> 8 & 0xff; // 取(8 ~15位)一個子節(jié)
char c = num >> 16 & 0xff; // 取(16~23位)一個子節(jié)
char d = num >> 24 & 0xff; // 取(24~31位)一個子節(jié)
printf("%x, %x, %x, %x", a, b, c, d); // 小端模式將輸出78,56,34,12
五、各類關(guān)系
5.1、int 與 NSinteger 區(qū)別
-
查看NSInteger的API可以知道:NSInteger是一個封裝,它會識別當(dāng)前操作系統(tǒng)的位數(shù),自動返回最大的類型。
NSInteger的API
5.2、int 與 long
- 查到C語言中,int和long的字節(jié)數(shù)是和操作系統(tǒng)指針?biāo)嘉粩?shù)相等。但c語言中說,long的長度永遠(yuǎn)大于或等于int
- Objective-C里,如下:
在32位系統(tǒng)中
int 占4個字節(jié)
long 占4個字節(jié)
NSInteger 是int的別名,占4個字節(jié)
long long 占8個字節(jié)
int32_t 是int的別名,占4個字節(jié)
int64_t 是long long的別名,占8個字節(jié)
在64位系統(tǒng)中
int 占4個字節(jié)
long 占8個字節(jié)
NSInteger 是long的別名,占8個字節(jié)
long long 占8個字節(jié)
int32_t 是int的別名,占4個字節(jié)
int64_t 是long long的別名,占8個字節(jié)
5.3、float 與 double
- 在32位、64位中
- float 占 4Byte
- double 占 8Byte
5.4、char
- 在32位、64位中,都只占 1 Byte


