Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpPmNuOf 52 of 390 menu
◀ ▶

Переполнение целого в C++

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

На обычном компьютере int занимает 4 байта, это 32 бита. Самое большое положительное число в нем равно 2147483647. Следующее, 2147483648, как положительное уже не входит.

Старший бит у знакового int показывает минус. У верхней границы он равен нулю, остальные биты - единицы. Следующая комбинация включает старший бит и обнуляет остальные. Эти же биты читаются как самое маленькое отрицательное число, -2147483648.

Сначала положим границу в long long: там она помещается. Затем запишем ее в int:

long long big = 2147483648LL; int num = big; std::cout << num << "\n"; // выведет -2147483648

Круг замкнут. После самого большого положительного идет самое маленькое отрицательное. Дальше числа растут к нулю, пока снова не упрутся в верхнюю границу.

Дан следующий код:

long long big = 2147483649LL; int num = big; std::cout << num << "\n";

Скажите, поместится ли это число в ячейку как положительное.

Есть число 3000000000. Помещается ли оно в диапазон типа int?

Какое самое большое положительное число хранит тип int?

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить