3 回答
TA贡献1827条经验 获得超9个赞
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 charor 相同的范围,或者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到18446744073709551615
C ++(或C)实现可以将字节的大小(以字节sizeof(type)为单位)定义为任何值,只要
表达式
sizeof(type) * CHAR_BIT求值为足够高的位数以包含所需的范围,并且类型的排序仍然有效(例如
sizeof(int) <= sizeof(long))。
实际的特定于实现的范围可以<limits.h>在C 中的头文件中找到,或者<climits>在C ++中找到(或者甚至更好,std::numeric_limits在<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();
TA贡献1806条经验 获得超5个赞
对于32位系统,“事实上”标准是ILP32 - 也就是说int,long指针都是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位。
- 3 回答
- 0 关注
- 935 浏览
添加回答
举报
