标准C ++ [3.9.1-1]表示
对于无符号字符类型,值表示的所有可能位模式表示数字。
标准[18.3.2.4-(注释197)]也表示无符号字符的最大值等于C中的UCHAR_MAX
,在C标准中定义为255 [5.2.4.2.1] 。那么这是否意味着C ++中unsigned char类型的大小恰好是8位?
答案 0 :(得分:10)
来自C11 5.2.4.2.1
下面给出的值应替换为适用于#if的常量表达式 预处理指令。而且,除了CHAR_BIT和MB_LEN_MAX之外 以下内容应替换为与a相同类型的表达式 表达式,它是根据整数转换的相应类型的对象 促销活动。 它们的实现定义值的大小(绝对值)应与显示的值相等或更大,且符号相同。
(强调我的)
因此,该标准定义至少UCHAR_MAX
需要为255,但它可能大于此值。
我们对尺寸的保证是:
sizeof(char) = 1 and sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
至少必须能够保存数据类型的签名版本:
char [-127, 127]
short [-32767, 32767]
int [-32767, 32767]
long [-2147483647, 2147483647]
long long [-9223372036854775807, 9223372036854775807]