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

时间:2010-04-15 23:18:21

标签: c integer standards

  

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

对于要应用的粗体规则,似乎暗示您需要一个无符号整数类型,其等级小于有符号整数类型 签名整数类型不能保存无符号整数类型的所有值。

是否存在这种情况的现实世界示例,或者此声明是否涵盖所有可能的排列?

1 个答案:

答案 0 :(得分:5)

如果您的平台位于sizeof(long int)==sizeof(int),那么signed long intunsigned int将属于此规则。在任何情况下,标准都没有规定转换排名等同于大小,只有转换排名提供了一个有序排序的排序(6.3.1.1.p1.1(sp?)):

  

没有两个有符号整数类型具有相同的等级,即使它们具有相同的等级   表示。

相关问题