C ++标准规定了int的大小,long类型是什么?

C ++标准规定了int的大小,long类型是什么?

我正在寻找有关基本C ++类型大小的详细信息。我知道这取决于架构(16位,32位,64位)和编译器。

但是有没有C ++的标准?

我在32位架构上使用Visual Studio 2008。这是我得到的:

char  : 1 byte

short : 2 bytes

int   : 4 bytes

long  : 4 bytes

float : 4 bytes

double: 8 bytes

我试图找到,但没有成功,可靠的信息,表述的大小charshortintlongdoublefloat(和其他类型的我没想到的),在不同的体系结构和编译器。



达令说
浏览 874回答 3
3回答

素胚勾勒不出你

C ++标准没有以字节为单位指定整数类型的大小,但它指定了它们必须能够容纳的最小范围。您可以从所需范围推断出最小位数。您可以从中推断出以字节为单位的最小大小以及定义一个字节中位数的CHAR_BIT宏的值(除了最模糊的平台之外,它都是8,并且它不能小于8)。一个额外的约束char是它的大小总是1个字节,或CHAR_BIT位(因此名称)。标准要求的最小范围(第22页)是:和MSDN上的数据类型范围:signed char:-127到127(注意,不是-128到127;这可以容纳1个补码和符号和大小的平台)unsigned char:0到255“plain”&nbsp;char:与signed charor&nbsp;相同的范围,或者unsigned char是实现定义的signed short:-32767至32767unsigned short:0到65535signed int:-32767至32767unsigned int:0到65535signed long:-2147483647至2147483647unsigned long:0到4294967295signed long long:-9223372036854775807至9223372036854775807unsigned long long:0到18446744073709551615C ++(或C)实现可以将字节的大小(以字节sizeof(type)为单位)定义为任何值,只要表达式sizeof(type) * CHAR_BIT求值为足够高的位数以包含所需的范围,并且类型的排序仍然有效(例如sizeof(int) <= sizeof(long))。实际的特定于实现的范围可以<limits.h>在C&nbsp;中的头文件中找到,或者<climits>在C ++中找到(或者甚至更好,std::numeric_limits在<limits>头文件中模板化)。例如,您将找到以下内容的最大范围int:C:#include&nbsp;<limits.h>const&nbsp;int&nbsp;min_int&nbsp;=&nbsp;INT_MIN;const&nbsp;int&nbsp;max_int&nbsp;=&nbsp;INT_MAX;C ++:#include&nbsp;<limits>const&nbsp;int&nbsp;min_int&nbsp;=&nbsp;std::numeric_limits<int>::min();const&nbsp;int&nbsp;max_int&nbsp;=&nbsp;std::numeric_limits<int>::max();

忽然笑

对于32位系统,“事实上”标准是ILP32 - 也就是说int,long指针都是32位数量。对于64位系统,主要的Unix'事实上'标准是LP64 -&nbsp;long指针是64位(但是int是32位)。在Windows 64位标准是LLP64 -&nbsp;long long和指针是64位(但long并int都是32位)。有一段时间,一些Unix系统使用了ILP64组织。这些事实上的标准都没有通过C标准(ISO / IEC 9899:1999)立法,但所有标准都是允许的。而且,顾名思义,sizeof(char)就是1,尽管在Perl的配置脚本测试。需要注意的是有机器(Crays),其中CHAR_BIT大于8.这意味着,IIRC大得多,这sizeof(int)也是1,因为这两个char和int是32位。
打开App,查看更多内容
随时随地看视频慕课网APP