【问题标题】:When does a type get promoted to an unsigned int?何时将类型提升为无符号整数?
【发布时间】:2015-01-27 18:51:14
【问题描述】:

这个article 说:

如果原始类型的所有值都可以表示为 int,则 较小类型的值转换为 int;否则,它是 转换为无符号整数

signed/unsigned charsigned/unsigned short 的所有值都可以表示为int,那么什么时候将类型提升为unsigned int

【问题讨论】:

  • charshort 可能与int 大小相同,在这种情况下int 将无法表示unsigned char/short 的所有值
  • 链接的文章明确谈到了c。你想选择一个语言标签,还是想要一个 c++ 语言定义规则,涵盖这个?
  • @Praetorian ... 也不一定是char,因为那可能是未签名的。

标签: c++ c types casting integer-promotion


【解决方案1】:

short 不能比int 长,但在某些平台上它可能是相同的大小。 intlong 也是如此。这意味着如果“较小”的那个是无符号的,那么“较大的”也必须是无符号的。

【讨论】:

    【解决方案2】:

    这篇文章使用了草率的术语。源类型不必“小于”int。以下是 C++11 标准的内容:

    boolchar16_tchar32_twchar_t 之外的整数类型的纯右值,其整数转换 rank (4.13) 小于int 的rank 可以转换为int 类型的prvalue 如果int 可以代表所有 源类型的值;否则,可以将源纯右值转换为unsigned int 类型的纯右值。

    在某些平台上,例如 unsigned shortint 都是 16 位长。尽管如此,根据定义,unsigned short 的排名低于int,并且受到整体提升。在这种情况下,int 不能代表unsigned short 类型的所有值,因此提升为unsigned int

    编辑:C99 有类似的措辞:

    无论intunsigned int 可以在表达式中使用以下内容 使用:

    • 具有整数类型的对象或表达式,其整数转换等级小于 大于等于intunsigned int的等级。
    • _Boolintsigned intunsigned int 类型的位字段。

    如果int 可以表示原始类型的所有值,则将该值转换为int; 否则,它将转换为unsigned int。这些被称为整数 促销。 48) 整数提升不会改变所有其他类型。

    【讨论】:

      【解决方案3】:

      好吧,如果 sizeof(char) == sizeof(int),那么 unsigned char 应该被提升为 unsigned int

      【讨论】:

      • 还有原始的char,如果碰巧没有签名的话。
      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 2017-07-01
      • 1970-01-01
      • 2016-12-04
      • 2019-12-21
      • 1970-01-01
      • 2020-04-15
      相关资源
      最近更新 更多