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?