int与long区别

数据模型决定了C语言中基本数据类型与数据宽度的对应关系。我们常用的32位模型称为ILP32,而64位模型有三种:LP64、LLP64和ILP64。在64位模型中,指针一定是64位的,但是int和long的宽度则在不同的数据类型中有不同的定义。如下表:

datatype

LP32

ILP32

LLP64

LP64

ILP64

char

8

8

8

8

8

short

16

16

16

16

16

int

16

32

32

32

64

long

32

32

32

64

64

long long

64

64

64

64

64

pointer

32

32

64

64

64

  从前的DOS是应该是LP32;现在的Windows 32和Linux 32是ILP32;在即将流行的64bits世界,Windows x64 版采用的是LLP64模型,Linux64采用的是LP64模型,用gcc编译时可以指定-m32按照ILP32模型进行编译。

  指针大小跟机器字长相关。为了兼容,在写C代码时,用int声明32bit整数,用long long声明64bit整数。

按照POSIX的规定,一个整型的正确格式化串为:

sign

char

short

int

long

long long

signed

%hhd

%hd

%d

%ld

%lld

unsigned

%hhu

%hu

%u

%lu

%llu

你可能感兴趣的:(c)