C++中整形数据类型的范围都定义在了limits.h中,具体场景中可以从这个文件获取编译器具体实现方式。
ISO并没有规定大部分数据类型的长度,仅仅规定了sizeof(char)=1,但位长却是CHAR_BIT定义的。
32位机器中,int,long,指针都是32-bit。
在Unix 64位机器中,int是32位,但long和指针是64位。
在Windows 64位机器中,long long和指针是64位,但long和int是32位。
另外,int也不一定偏是4个字节的,在SPARC64中,int是8个字节。
再说double和float,虽然ISO文档里没规定,但是又另外一个IEEE754文档做了规定,规定float是32位而double是64位,当然,你可以不遵循这个文档,但实际应用中,还没有操作系统架构不遵循这个文档。所以,你可以把float和double的长度看成是和平台无关的。
所以,以后也注意点,别一提到long就马上觉得是32位的,这要视平台而定,ISO文档里没有规定。