2、C++ 設計
1.字節和字長 指針
字節,八位就是一個字節,是固定概念。字長是指計算機一次能處理的二進制數據的長度,是一個非固定的概念。例如,8位計算機的字長爲8,即一個字節, 32位計算機的字長位32,即4個字節,同理,64位計算機的字長爲64,即8字節。 編譯器
2.char類型始終是一個字節長,即8位。 it
3.int、short int和long int 編譯
一般int爲一個字長,short爲半個字長,long爲一個或2個字長(在32位機器中爲一個字長)。 table
4.浮點型float、雙精度double、和長雙精度long double 程序設計
典型狀況下,float 爲一個字,double是兩個字,long double爲三個或四個字。 硬件
C/C++僅僅定義了這些基本數據類型之間的關係,並無定義嚴格定義它們的字長。在不一樣的平臺上,根據編譯器不一樣的實現,它們的字長以下表所示: 數據類型
數據類型 二進制 |
LP64 |
ILP64 |
LLP64 |
ILP32 |
LP32 |
char |
8 |
8 |
8 |
8 |
8 |
short |
16 |
16 |
16 |
16 |
16 |
_int32 |
N/A |
32 |
N/A |
N/A |
N/A |
int |
32 |
64 |
32 |
32 |
16 |
long |
64 |
64 |
32 |
32 |
32 |
long long |
N/A |
N/A |
64 |
N/A |
N/A |
pointer |
64 |
64 |
64 |
32 |
32 |
在這張表中,LP64,ILP64,LLP64是64位平臺上的字長模型,ILP32和LP32是32位平臺上的字長模型。
LP64意思是long和pointer是64位,ILP64指 int,long,pointer是64位,LLP指long long和pointer是32-bit的。ILP32指int,long和pointer是32位的,LP32指long和pointer是32位的。
32位Windows採用的是ILP32數據模型,64位Windows採用的是LLP64數據模型。
因此,Windows上的32位程序設計和64位程序設計最大的不一樣(也就是IP32和LLP64的不一樣),就在於指針的長度不一樣??由32位變成了64位。
Win32 API在不少狀況下,都須要將整數轉換成指針或者相反。在 32 位的硬件上不會有問題,其中指針的大小和整數的大小是相同的,但在 64 位的硬件上卻徹底不同。