代码之家  ›  专栏  ›  技术社区  ›  SiegeX

最后一个整数提升规则在C中是如何应用的?

  •  5
  • SiegeX  · 技术社区  · 15 年前

    6.3.1.8p1:否则,整数促销为 对两个操作数执行。然后将以下规则应用于提升的操作数:如果两个操作数相同 类型,则不需要进一步转换。否则,如果两个操作数都有带符号整数类型或都有无符号整数 类型,具有较小整数转换秩类型的操作数转换为具有较大秩的操作数类型。 否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数类型的秩, 然后将有符号整数类型的操作数转换为无符号整数类型的操作数类型。否则, 如果带符号整数类型的操作数的类型可以表示带符号的操作数类型的所有值 整数类型,然后将无符号整数类型的操作数转换为有符号整数类型的操作数类型。 否则,两个操作数都将转换为与带符号的操作数类型对应的无符号整数类型。 整数类型。

    要应用粗体规则,似乎意味着您需要有一个无符号整数类型,其排名小于有符号整数类型。 有符号整数类型不能保存无符号整数类型的所有值。

    是否有这样一个案例的真实例子,或者这句话是作为一个“一网打尽”来涵盖所有可能的排列?

    1 回复  |  直到 11 年前
        1
  •  5
  •   MSN    15 年前

    如果你有一个平台 sizeof(long int)==sizeof(int) 然后 signed long int unsigned int 就属于这条规则。在任何情况下,标准并未规定转换等级等同于尺寸,只有转换等级提供了一个有效的尺寸顺序(6.3.1.1.p1.1(sp?)。:

    任何两个有符号整数类型都不应具有相同的秩,即使它们具有相同的秩。 陈述。

    推荐文章