当前位置:编程学习 > JAVA >>

C/C++/Java/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位指针类型

 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,