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

相关文章
相关标签/搜索