Мне дали код, который выглядит так:
unsigned int x = 0xDEADBEEF;
unsigned short y = 0xFFFF;
if (x > (signed short) y)
printf("Hello");
Однако неверно, что x > y, когда y приводится к короткому со знаком (а затем неявно преобразуется в unsigned int при сравнении), принимает значение MAX_UINT. Почему это происходит? y расширяет знак, или что еще может вызвать такое странное поведение?