Переполнение целого в 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?