Всем привет! Что же такое переполнение? (Не... Мы не о солидных любителях по трапезничать, хотя пару кг хотелось бы скинуть конечно...)
И так... погнали!
Кампутерная память хранит разную инфу (прон например), и эта самая инфа, как правило, представлена цифрами (цифры образуют числа, которые для машины являются словами - командами (гав, гав)). Перейдем сразу к десерту. Для нашей помойки рассмотрим int - он же integer, он же целое. Причем есть unsigned integer - беззнаковое целое и чтобы два раза не вставать - signed integer - число со знаком. Далее ... любое целое число в двоичном виде, как правило, занимает 32 бита, т.е. например цифра 7 будет выглядеть следующим образом: 0000 0000 0000 0000 0000 0000 0000 0111. Для операционной системы - все эти 32 бита (дырки, палки) - одно число. Максимальное значение, которое можно записать в такое число - это 2 в 32 степени (2 - потому, что только два значения 0 и 1), (32 - ячейки памяти, то самое количество битов). Вроде для без знаковых чисел все понятно... просто забиваем все по мере надобности, т.е. самое большое число без знаковое - это когда всё в единицах.
И так вот, допустим у нас есть число 1111 1111 1111 1111 1111 1111 1111 1111, что же будет если к нему прибавить, например 1? Вот тут и произойдет ПЕРЕПОЛНЕНИНЕ - единится сложиться с максимальным числом и появится ... 0000 0000 0000 0000 0000 0000 0000 0000.... мир нулей ... хотя все зависит от того сколько прибавят.
С отрицательными числами тоже самое. Если мы рассматриваем область памяти, как число со знаком, то самый старший (левый бит) этого числа будет отвечать за знак. Для наглядности сократим количество нулей... И так, в новом случае 0010 - это два, 0111 - семь, а 1000 - уже минус 8. 1001 - это минус семь... Вплоть до 1111 - это минус один (не путать со скандинавским богом(в нашем случае - багом) Одином). И что же произойдет когда из -8 мы вычтем 1 ? 1000 - 1 = 0111. Получим 7. Т.е. переполнение - это когда полученное число не влезает в память, выделенную под него и начинает чудить - отбрасывать старшие цифры, которые не влезли. Опасная вещь... Засим прощаюсь! До новых встреч!
1 минута
25 мая 2024