【问题标题】:Integer promotions in C will downgrade `long int`?C 中的整数促销会降级“long int”吗?
【发布时间】:2013-02-21 04:47:26
【问题描述】:

来自C standard

6.3.1.1

如果一个 int 可以表示原始类型的所有值(受限制 通过宽度,对于一个位域),该值被转换为一个 int; 否则,将其转换为无符号整数。这些被称为 整数促销。

所以这意味着如果我在表达式中使用long int,它将被降级为unsigned int

【问题讨论】:

  • 否 - 因为 int 不能代表 long int 的“所有可能值”。
  • 好吧,如果long int 实际上大于ints,无论如何...

标签: c


【解决方案1】:

你引用的那一段受上面的文字限制:

以下内容可以用在表达式中,只要是 int 或 unsigned 可以使用 int:

  • 具有整数类型的对象或表达式,其整数转换等级小于 int 和 unsigned int 的等级。
  • _Bool、int、signed int 或 unsigned int 类型的位域。

如果一个 int 可以表示原始类型的所有值,则该值为 转换为 int;否则,它将转换为无符号整数。 这些被称为整数促销。所有其他类型不变 通过整数促销。

换句话说,long int 不会被提升为 intunsigned int

【讨论】:

    【解决方案2】:

    我认为“原始类型”是指“[...] 整数类型(除了 int 或 unsigned int) 其整数转换秩小于或等于 int 的秩并且 unsigned int",如前面第 6.3.1.1.2 节中定义的那样。但是,不错的尝试:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-06
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多