Выбор ответа Junior Типы и неопределённое поведение спрашивают часто обновлено

Сравнение -1 и 1u

Вопрос

Что вернёт выражение -1 < 1u?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: false: -1 приводится к беззнаковому UINTMAX. По обычным арифметическим преобразованиям при смешении int и unsigned int знаковый операнд приводится к беззнаковому: -1 становится UINTMAX, а UINTMAX < 1u ложно. - Математическое ожидание true здесь не работает: сравнение идёт в…

Варианты ответа

  1. true: -1 меньше 1, сравнение идёт по значениям
  2. Ошибку компиляции: нельзя сравнивать int и unsigned
  3. false: -1 приводится к беззнаковому UINT_MAXправильный ответ
  4. Неопределённое поведение: отрицательное в беззнаковом

Разбор

По обычным арифметическим преобразованиям при смешении int и unsigned int знаковый операнд приводится к беззнаковому: -1 становится UINT_MAX, а UINT_MAX < 1u ложно.

  • Математическое ожидание true здесь не работает: сравнение идёт в беззнаковом типе.
  • Компилятор не запрещает такое сравнение, максимум предупредит (-Wsign-compare).
  • Преобразование отрицательного в беззнаковое определено (по модулю 2ⁿ), UB нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.