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

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

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

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

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

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