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标准没有以字节为单位指定整数类型的大小,但它指定了它们必须能够容纳的最小范围.您可以从所需范围推断出最小位数.你可以从中推断最小大小(以字节为单位)和defines the number of bits in a byte的CHAR_BIT宏的值(除了最简陋的平台以外,它都是8,并且它不能小于8).
char的另一个约束是它的大小总是1个字节,或CHAR_BIT位(因此名称).
最小范围required by the standard(第22页)是:
和数据类型范围MSDN:
>签名字符:-127到127(注意,不是-128到127;这适用于1的补码和符号和大小的平台)
> unsigned char:0到255
>“plain”char:与signed char或unsigned char相同的范围,implementation-defined
>签名简称:-32767至32767
> unsigned short:0到65535
> signed int:-32767到32767
> unsigned int:0到65535
>签署长:-2147483647至2147483647
> unsigned long:0到4294967295
>长签:-9223372036854775807至9223372036854775807
> unsigned long long:0到18446744073709551615
C(或C)实现可以将字节sizeof(type)的类型大小定义为任何值,只要
>表达式sizeof(type)* CHAR_BIT的计算结果是足够高的位数以包含所需的范围,并且
>类型的排序仍然有效(例如sizeof(int)< = sizeof(long)).
实际的特定于实现的范围可以在< limits.h>中找到. C中的标题,或< climits>在C中(或者甚至更好,在< 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();