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
  我试图找到没有太多成功的可靠信息,说明不同架构和编译器下的char , short , int , long , double , float (以及其他类型,我没有想到)的大小。 
  C ++标准没有以字节为单位指定整型的大小,但它指定了它们必须能够保持的最小范围。  您可以从所需的范围中推断出最小的位数。  您可以从中推断出最小字节数和CHAR_BIT宏的值,该值定义了字节中的位数(除8个最不明显的平台以外,它不能少于8个)。 
  char另一个约束是它的大小总是1个字节,或者CHAR_BIT位(因此是名称)。 
标准要求的最小范围(第22页)为:
和MSDN上的数据类型范围:
signed char :-127到127(注意,不是-128到127;这适用于1的补码和符号和大小的平台) unsigned char :0到255 char :与signed char或unsigned 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  - 也就是说, int , long和pointer都是32位的数量。 
  对于64位系统,主Unix的“事实上”标准是LP64- long ,指针是64位(但int是32位)。  Windows 64位标准是LLP64  - 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位。 
  实际上没有这样的事情。  您可以期望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?
