首先要强调的是:int型数据的大小和硬件平台位数无关,它是由C语言标准和编译器共同决定的。
Sizes of integer types <limits.h>
The values given below shall be replaced by constant expressions suitable for use in #ifpreprocessing directives.
...
...
minimum value for an object of type int
INT_MIN -32767 // −(215 − 1) //这只是其中一个示例,不同平台可能有不同定义
— maximum value for an object of type int
INT_MAX +32767 // 215 − 1
翻译过来就是,int类型的大小是由limits.h文件中INT_MIN和INT_MAX两个宏定义来决定的,而limits.h文件在编译器库文件中可以找到。
int类型对应平台的大小是这样的:
16位系统中,int型为16位大小,两字节
32位系统中,int型为32位大小,四字节
64位系统中,int型为32位大小,四字节
事实上,除了int类型,还有一个类型在不同平台中有不同的表现,那就是long型:
16位系统中,long型为32位大小,4字节
32位系统中,long型为32位大小,4字节
64位系统中,long型为64位大小,8字节
数据类型占内存的位数实际上与操作系统的位数和编译器(不同编译器支持的位数可能有所不同)都有关,具体某种数据类型占字节数得编译器根据操作系统位数两者之间进行协调好后分配内存大小。具体在使用的时候如想知道具体占内存的位数通过sizeof(int)可以得到准确的答案。