程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++/Java/C#的基礎類型模型的定義

C/C++/Java/C#的基礎類型模型的定義

編輯:C++入門知識

C/C++僅僅定義基本數據類型的關系(字長:CHAR<=SHORT<=INT<=LONG),並沒有嚴格定義它們的字長,根據編譯器的不同實現,它們的字長如下表所示:

DATETYPE

LP32

ILP32

LP64

ILP64

LLP64

JAVA

C#

CHAR

8

8

8

8

8

16

16

BYTE

N/A

N/A

N/A

N/A

N/A

8

8

SHORT

16

16

16

16

16

16

16

_INT32

N/A

32

N/A

N/A

N/A

N/A

N/A

INT

16

32

32

64

32

32

32

LONG

32

32

64

64

32

64

64

LONG LONG

64

64

64

64

64

N/A

N/A

POINTER

32

32

64

64

64

N/A

N/A

FLOAT

32

32

32

32

32

32

32

DOUBLE

64

64

64

64

64

64

64

BOOL

T/F

T/F

T/F

T/F

T/F

T/F

T/F

         上表中,LP64、ILP64、LLP64是64位平台上字長的數據模型,ILP32和LP32是32位平台上字長的數據模型。

 LP64指的是LONG/POINTER字長為64位;
ILP64指的是INT/LONG/POINT字長為64位;
LLP64指的是LONGLONG/POINTER字長為64位;
ILP32指的是INT/LONG/POINTER字長為32位;
LP32指的是LONG/POINT字長是32位的,INT字長為16位。
注1:32位Windows采用的是ILP32數據模型,64位Windows采用LLP64數據模型。

注2:32位的Linux/Unix使用ILP32數據模型,64位Linux/Unix使用LP64數據模型。

注3:為了增加代碼的移植性,打印無符號整形數,不管申明時是如何定義的,統一使用 %lu。

注4:為了保證平台的通用性,代碼中盡量不要使用long數據庫型。

注5:使用INT時也可以使用intptr_t來保證平台的通用性,它在不同的平台上編譯時長度不同,但都是標准的平台長度,比如:64位機器上長度為8字節,32位機器上長度為4字節。

注6:編寫代碼時要盡量使用sizeof來計算數據類型的大小。     

注7:ssize_t和size_t分別是signsize_t和unsigned signed size of computer word size。它們也是表示計算機的字長,在32位機器上是int型,在64位機器上long型,從某種意義上來說它們等同於intptr_t和 uintptr_t。

 

WINDOWS下數據類型,定義如下:

類型

定義

類型

定義

DWORD32

32位無符號整數

DWORD64

64位無符號整數

INT32

32位有符號整數

UINT32

32位無符號整數

INT64

64位有符號整數

UINT64

64位無符號整數

LONG32

32位有符號整數

ULONG32

32位無符號整數

LONG64

64位有符號整數

ULONG64

64位無符號整數

DWORD_PTR

指針精度無符號長整型

 

 

HALF_PTR

指針大小的一半,有符號

UHALF_PTR

指針大小的一半,無符號

INT_PTR

指針進度有符號整數

UINT_PTR

指針進度無符號整數

LONG_PTR

指針進度的有符號長整型

ULONG_PTR

指針進度的無符號長整型

SIZE_T

指針可用的最大字節數

SSZIE_T

有符號SIZE_T

LPARAM

與LONG_PTR為同義詞

WPARM

與UINT_PTR為同義詞

POINTER_32

32位指針類型

POINTER_64

64位指針類型

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved