Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Преобразование C Short в Int

Автор вопроса: WillОтветов: 1

Мне дали код, который выглядит так:

unsigned int x = 0xDEADBEEF;
unsigned short y = 0xFFFF;
if (x > (signed short) y)
    printf("Hello");

Однако неверно, что x > y, когда y приводится к короткому со знаком (а затем неявно преобразуется в unsigned int при сравнении), принимает значение MAX_UINT. Почему это происходит? y расширяет знак, или что еще может вызвать такое странное поведение?

ctype-conversion

Ответы

Ответ 1 · рейтинг 4 · Jens Gustedt

преобразование беззнакового в знаковое для значений, которые не соответствуют положительным значениям знакового типа, определяется реализацией. Здесь, для вашего конкретного компилятора, вероятно, окажется -1, а затем преобразованным в беззнаковый будет UINT_MAX.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы