Почему переполнение беззнакового целого числа определяет поведение, а переполнение знакового целого числа — нет?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему переполнение беззнакового целого числа определяет поведение, а переполнение знакового целого числа — нет?

Сообщение Anonymous »

Переполнение беззнакового целого числа четко определено стандартами C и C++. Например, стандарт C99 (

Код: Выделить всё

§6.2.5/9
) утверждает


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


Однако оба варианта стандарты утверждают, что переполнение знакового целого числа является неопределенным поведением. Опять же из стандарта С99 (

Код: Выделить всё

§3.4.3/1
)


Примером неопределенного поведения является поведение при переполнении целых чисел.


Есть ли историческая или (еще лучше!) техническая причина этого несоответствия?>

Подробнее здесь: https://stackoverflow.com/questions/181 ... verflow-is
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»