64位與32位編程的數據類型區別(C/C++)

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 位的硬件上卻徹底不同。

相關文章
相關標籤/搜索