6.3.1.8p1: De lo contrario, las promociones enteras son realizadas en ambos operandos. A continuación, se aplican las siguientes reglas a los operandos promocionados: si ambos operandos tienen el mismo tipo de , no es necesario realizar más conversiones. De lo contrario, si ambos operandos tienen tipos de entero con signo o ambos tienen tipos de entero sin signo , el operando con el tipo de rango de conversión entero menor se convierte al tipo del operando con mayor rango. De lo contrario, si el operando que tiene un tipo entero sin signo tiene un rango mayor o igual al rango del tipo del otro operando, , entonces el operando con tipo entero con signo se convierte al tipo del operando con tipo entero sin signo. De lo contrario, si el tipo del operando con tipo entero con signo puede representar todos los valores del tipo del operando con tipo entero sin signo , entonces el operando con tipo entero sin signo se convierte al tipo del operando con tipo entero con signo . De lo contrario, ambos operandos se convierten al tipo de entero sin signo correspondiente al tipo del operando con tipo entero con signo.¿Cómo se aplica alguna vez la última regla de promoción entera en C?
Para la regla en negrita que deben aplicarse parecería implicar que necesita tener tiene un tipo entero sin signo cuyo rango es menor que el tipo entero con signo y el tipo entero con signo no puede contener toda la valores del tipo de entero sin signo.
¿Hay un ejemplo del mundo real de tal caso o esta afirmación sirve como un todo para cubrir todas las permutaciones posibles?
En este caso, 'long' tiene mayor rango que' unsigned int', pero no puede representar todos sus valores, por lo que ambos operandos se convierten en 'unsigned long'. Lo que significa que, por ejemplo, '-1L * 1U' será un gran número positivo. – caf