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

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

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

对于要应用的粗体规则,它似乎意味着您需要有一个秩小于有符号整数类型的无符号整数类型,并且有符号整数类型不能包含无符号整数类型的所有值


有这样一种情况的真实例子吗?或者这个语句是一个涵盖所有可能排列的总括语句吗?

如果您有一个平台,其中
sizeof(long int)==sizeof(int)
,那么
signed long int
unsigned int
将属于此规则。在任何情况下,本标准均未规定换算秩与尺寸相等,仅规定换算秩提供了尺寸有效排序(6.3.1.1.p1.1(sp?):

两个有符号整数类型不得具有相同的秩,即使它们具有相同的秩 代表性


在这种情况下,
long
的秩大于
unsigned int
,但不能表示其所有值,因此两个操作数都转换为
unsigned long
。这意味着,例如,
-1L*1U
将是一个大的正数。