关于C ++

时间:2015-09-25 15:30:19

标签: c++

标准C ++ [3.9.1-1]表示

  

对于无符号字符类型,值表示的所有可能位模式表示数字。

标准[18.3.2.4-(注释197)]也表示无符号字符的最大值等于C中的UCHAR_MAX,在C标准中定义为255 [5.2.4.2.1] 。那么这是否意味着C ++中unsigned char类型的大小恰好是8位?

1 个答案:

答案 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]