Я справді не можу знайти "авторитетного" джерела з цього приводу, головним чином тому, що це, мабуть, питання конвенції, а термінологія часто дуже непослідовна. Але наступний уривок із « Безпечного кодування в C та C ++ » Роберта Сікорда підсумовує моє розуміння ситуації:
Ціле число переповнення виникає, коли ціле число збільшується за максимальне значення або зменшується понад мінімальне значення 3 . Переповнення цілих чисел тісно пов'язані з поданим представленням.
Зноска продовжує говорити:
[3] Зниження цілого числа, що перевищує його мінімальне значення, часто називають цілим числом під потоком , хоча технічно цей термін відноситься до умови з плаваючою комою.
Причина, що ми називаємо це цілим переповненням, полягає в тому, що просто не вистачає місця в типі, щоб представити значення. У цьому сенсі він схожий на переповнення буфера (за винятком того, що реально перетинає межу буфера, він зазвичай виявляє поведінку при обертанні. *) З цього погляду немає концептуальної різниці між INT_MIN - 1та INT_MAX + 1. В обох випадках у intтипі даних просто не вистачає місця, щоб представити будь-яку цінність, тож у нас є переповнення .
Також може бути корисно зазначити, що в архітектурах процесорів x86 та x86_64 регістр прапорів включає біт переповнення . Біт переповнення встановлюється, коли переповнена підписана ціла арифметична операція. Вираз INT_MIN - 1задасть біт переповнення. (Біта "підливу" немає.) Так зрозуміло, що інженери AMD та Intel використовують термін "переповнення" для опису результату цілочисельної арифметичної операції, яка має занадто багато бітів, щоб вміститись у тип даних, незалежно від того значення чисельно занадто велике або занадто мало.
* Насправді в C підписане ціле число переповнення насправді є невизначеним поведінкою, але в інших мовах, таких як Java, арифметика доповнення двох буде завершуватися.
INT_MIN - 1абоINT_MAX + 1