> 5)Otherwise, both operands are converted to the unsigned integer
> type corresponding to the type of the operand with signed
> integer type.
Das müsste den Fall regeln
sizeof( unsigned int ) == 4
sizeof( long ) == 4
unsigned int i = 200;
long j = -200;
if( i < j )
Der 'rank' von long ist höher als der von int, auch wenn beide gleiche
sizeof haben. Daher greift Regel 3 nicht. Regel 4 greift ebenfalls
nicht, da durch die sizeof klar ist, dass ein long eben nicht alle mit
einem unsigned int darstellbaren Werte darstellen kann.
Regel 5 besagt aber in so einem Fall, dass der unsigned int zu einem
unsigned long konvertiert wird, und das das long zu einem unsigned long
konvertiert wird. Der Vergleich im Beispiel wird also als unsigned long
Vergleich durchgeführt.
Im Endeffekt läuft es bei (fast) allen Regeln darauf hinaus: Treffen
signed und unsigned aufeinander, dann 'gewinnt' unsigned. Es sei denn
der signed Wert hat eine groß genuge sizeof, so dass alle Werte des
unsigned damit darstellbar sind.