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 (以及其他类型,我没有想到)的大小。


C ++标准没有以字节为单位指定整型的大小,但它指定了它们必须能够保持的最小范围。 您可以从所需的范围中推断出最小的位数。 您可以从中推断出最小字节数和CHAR_BIT宏的值,该值定义了字节中的位数(除8个最不明显的平台以外,它不能少于8个)。

char另一个约束是它的大小总是1个字节,或者CHAR_BIT位(因此是名称)。

标准要求的最小范围(第22页)为:

和MSDN上的数据类型范围:

  • signed char :-127到127(注意,不是-128到127;这适用于1的补码和符号和大小的平台)
  • unsigned char :0到255
  • “plain” char :与signed charunsigned char相同的范围,由实现定义
  • signed short :-32767至32767
  • unsigned short格式:0到65535
  • signed int :-32767至32767
  • unsigned int :0到65535
  • signed long :-2147483647至2147483647
  • unsigned long整数:0到4294967295
  • signed long long :-9223372036854775807至9223372036854775807
  • unsigned long long :0到18446744073709551615
  • C ++(或C)实现可以将字节sizeof(type)的大小定义为任何值,只要

  • 表达式sizeof(type) * CHAR_BIT计算结果高达足以包含所需范围的位数
  • 类型的排序仍然有效(例如sizeof(int) <= sizeof(long) )。
  • 实际的特定实现范围可以在C中的<limits.h>头文件中找到,或者在C ++中找到<climits> (甚至更好,在<limits>头文件中的模板化std::numeric_limits中)。

    例如,这是你将如何找到int最大范围:

    C:

    #include <limits.h>
    const int min_int = INT_MIN;
    const int max_int = INT_MAX;
    

    C ++

    #include <limits>
    const int min_int = std::numeric_limits<int>::min();
    const int max_int = std::numeric_limits<int>::max();
    

    对于32位系统,'事实上'的标准是ILP32 - 也就是说, intlong和pointer都是32位的数量。

    对于64位系统,主Unix的“事实上”标准是LP64- long ,指针是64位(但int是32位)。 Windows 64位标准是LLP64 - long long ,指针是64位(但longint都是32位)。

    曾经,一些Unix系统使用ILP64组织。

    这些事实标准都没有通过C标准(ISO / IEC 9899:1999)的立法,但都允许使用它。

    而且,根据定义, sizeof(char)1 ,尽管在Perl配置脚本中进行了测试。

    请注意,有些机器(Crays)的CHAR_BIT比8大得多。这意味着IIRC, sizeof(int)也是1,因为charint都是32位。


    实际上没有这样的事情。 您可以期望std::size_t始终表示当前体系结构上的未签名本地整数大小。 即16位,32位或64位。

    但就所有其他内置类型而言,它确实取决于编译器。 以下是从最新C ++标准的当前工作草案中摘录的两段摘录:

    有五种标准的有符号整数类型:signed char,short int,int,long int和long long int。 在这个列表中,每种类型至少提供与列表中前面那些相同的存储空间。

    对于每个标准的有符号整数类型,都存在一个对应的(但不同的)标准无符号整数类型:无符号字符,无符号短整型,无符号整型,无符号长整型和无符号长型长整型,每一个都占用相同的存储并具有相同的对齐要求。

    如果你想静态(编译时)可以断言这些基本类型的大小。 如果假设的大小发生变化,它会提醒人们考虑移植代码。

    链接地址: http://www.djcxy.com/p/1051.html

    上一篇: What does the C++ standard state the size of int, long type to be?

    下一篇: How can I profile C++ code running in Linux?