#c
Согласно Стандарту, переполнение знакового есть неопределенное поведение... Значит ли это, что классический случай: unsigned int ui = UINT_MAX - rand() % 10; signed int si = ui; Является неопределенным поведением? Где можно найти как можно более полный перечень ситуаций, в которых возможно UB? Пускай и общее описание, без досконального разбора каждого случая.
Ответы
Ответ 1
Переполнение при целочисленном преобразовании к знаковому типу не является неопределенным поведением. Результат при таком переполнении определяется реализацией или может привести к сигналу 6.3 Conversions 6.3.1 Arithmetic operands 6.3.1.3 Signed and unsigned integers [...] 3 Otherwise, the new type is signed and the value cannot be represented in it; either the result is implementation-defined or an implementation-defined signal is raised. К неопределенному поведению приводит знаковое целочисленное переполнение при выполнении арифметических вычислений, но не при выполнении целочисленных преобразований. Перечисление ситуаций, в которых возникает неопределенное поведение можно найти в конце стандарта языка, в приложении J. Раздел J.2 Undefined behavior.
Комментариев нет:
Отправить комментарий