Задать вопрос
@gth-other

Предопределено ли присвоение типу данных значения, не помещающегося в этот тип данных?

Иными словами, если у нас есть такой вот код:
uint64_t a = 999999999999;
uint16_t b = (uint16_t)a;


Всегда ли в b будет одно и тоже значение или это зависит от каких-то факторов вроде компилятора, системы, содержимого ОЗУ и т.д.?
  • Вопрос задан
  • 64 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@res2001
Developer, ex-admin
В стандарте С11 п.6.5.4 пишут, что лишние байты будут отброшены ("removes any extra range and precision").
Какой результат будет, если типы знаковые и значение а отрицательное и не влазит в диапазон целевого типа не уточняется.
В плюсовом стандарте я что-то ничего не нашел на эту тему, но по факту поведение аналогично Си.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Да, если исходное значение не помещается в новый тип - поведение будет зависеть от реализации.

Где-то может отбросить байты, а где-то может упасть с ошибкой
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы