ЗмістНатисність на посилання, щоб перейти до потрібного місця
Ви маєте є лічильник, який може рахувати лише до певного числа. Наприклад, кишеньковий калькулятор, який показує максимум 999. Якщо спробуєте додати 1 до 999, він не зможе показати 1000 - цифри просто "переповняться" (overflow) і калькулятор покаже щось зовсім інше, наприклад 000.
У програмуванні такий ефект називають integer overflow (переповнення цілого числа).
Це відбувається, коли число стає більшим за максимальне значення, яке може зберегти обраний тип змінної.
Наприклад, якщо змінна int може зберігати числа до 2,147,483,647, то додавання 1 зробить її значення… негативним!
Чому 2,147,483,647 - це "стеля" для 32-бітного числа
У комп’ютері числа зберігаються в бінарному вигляді (тобто як послідовність нулів і одиниць).
"32-бітний" означає, що для зберігання числа виділяється 32 комірки, і в кожній може бути або 0, або 1.
Але якщо число signed (зі знаком), то одна з цих комірок зарезервована для знаку:
- 0 у першому біті — число додатне,
- 1 у першому біті — число від’ємне.
Тобто замість 32 біт для величини числа залишається лише 31 біт.
Максимальне значення Коли всі 31 біти (крім знакового) заповнені одиницями, ми отримуємо найбільше можливе додатне число:
1111111111111111111111111111111 (31 одиниця)
У десятковій системі це якраз 2,147,483,647. У шістнадцятковій (hex) формі це записується як 0x7FFFFFFF:
- 7 — це бінарно 0111 (тобто знак 0 + три одиниці),
- F — це бінарно 1111 (чотири одиниці),
- і так далі до кінця.
Через це в програмах іноді трапляються дуже дивні помилки, а в історії навіть були серйозні аварії через переповнення. Трапляються навіть меми через помилку integer overflow, але це не точно.
Цей допис поки що не має жодних доповнень від автора/ки.