通过阅读C ++标准,我一直了解C ++中不可分割的基本类型的大小如下:
sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int)
我从3.9.1 / 2推论得出:
有四种有符号整数类型:“ signed char”,“ short int”,“ int”和“ long int”。在此列表中,每种类型提供的存储量至少与列表中位于其前的存储量一样。普通整数具有执行环境的体系结构建议的自然大小
此外,char3.9.1 /将其大小描述为:
足够大,可以存储实现的基本字符集的任何成员。
1.7 / 1对此进行了更具体的定义:
C ++内存模型中的基本存储单元是字节。字节至少大到足以包含基本执行字符集的任何成员,并且由连续的位序列组成,其位数由实现定义。
这使我得出以下结论:
1 == sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int)
其中sizeof告诉我们类型是多少个字节。此外,实现定义的是一个字节中有多少位。我们大多数人可能习惯于处理8位字节,但标准表示n字节中有位。
Alf P. Steinbach 在这篇文章中说:
保证(至少)32位长。
我了解根据标准理解的C ++中基本类型的大小,这无可厚非。通常,由于初学者是错误的,所以我会轻视此声明,但是由于这是Alf,我认为值得进一步研究。
那么,你怎么说呢?标准是否保证长度至少为32位?如果是这样,请具体说明此保证的方式。我只是看不到。
C ++标准专门说,要了解C ++,您必须了解C(1.2 / 1)1
C ++标准隐式定义的值的最小极限的long能容纳是LONG_MIN- LONG_MAX 2
因此,无论a long有多大,它都必须足够大以将LONG_MIN保持为LONG_MAX。
但是Alf和其他人明确指出long至少必须为32位。这就是我要建立的。C ++标准明确指出,未指定字节中的位数(可以是4、8、16、42)。那么如何从能够容纳这些位数LONG_MIN-LONG_MAX到至少32位进行连接?
(1)1.2 / 1:以下引用文件对于应用本文件必不可少。凡是注日期的引用文件,仅所引用的版本适用。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本标准。
ISO / IEC 2382(所有部分),信息技术–词汇
ISO / IEC 9899:1999,编程语言– C
ISO / IEC 10646-1:2000,信息技术–通用多八位编码字符集(UCS)–第1部分:体系结构和基本多语言平面
(2)定义<climits>为:
LONG_MIN -2147483647 // -(2^31 - 1)
LONG_MAX +2147483647 // 2^31 - 1
qq_遁去的一_1
翻过高山走不出你
牛魔王的故事
相关分类