首页 > 代码库 > int 和 long的区别

int 和 long的区别

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

datatypeLP32ILP32LLP64LP64ILP64
char88888
short1616161616
int1632323264
long3232326464
long long6464646464
pointer3232646464

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

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

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

signcharshortintlonglong long
signed%hhd%hd%d%ld%lld
unsigned%hhu%hu%u%lu%llu

int 和 long的区别