就这样.没有找到任何类似的话题所以请耐心等待.
从ANSI C规范的副本,请参见第3.1.2.5节 - 类型:
声明为char类型的对象足够大,可以存储基本执行字符集的任何成员.如果$ 2.2.1中枚举的所需源字符集的成员存储在char对象中,则其值保证为正.如果其他数量存储在char对象中,则行为是实现定义的:值被视为有符号或非负整数.
第2.2.1节 - 字符集中介绍了"执行字符集"的概念.
换句话说,char必须至少足够大以包含构成基本执行字符集的至少95个不同字符的编码.
现在添加2.2.4.2节- 数值限制
符合要求的实施应记录本节规定的所有限制,应在标题
和 规定中规定
.
整数类型的大小
下面给出的值应替换为适用于#if预处理指令的常量表达式.它们的实现定义值的大小(绝对值)应等于或大于显示的值,并带有相同的符号.
最小对象的最大位数,不是位字段(字节)
CHAR_BIT 8signed char
SCHAR_MIN -127 类型的对象的最小值signed char
SCHAR_MAX +127 类型的对象的最大值unsigned char
UCHAR_MAX 255 类型的对象的最大值
....
所以你有它 - char中的位数必须至少为8.
不,它不能保证是8位.sizeof(char)保证为1,但这并不一定意味着一个8位字节.
no,char数据类型必须至少包含8位(参见ANSI C规范)
C99标准草案说一个字节必须至少为8位宽,因为它
包含一个宏CHAR_BIT
,它产生每字节的位数,并保证至少为8(§5.2.4.2.1).
C++标准草案包括
名称
(第18.2.2节)下的C语言.