Переполнение целого числа в C#
У типа int есть верхняя и нижняя граница.
Число 2147483648 как положительное
в int не входит. Если записать такое
число прямо в код как литерал int,
компилятор не пропустит программу:
// int num = 2147483648;
В C# тип int всегда занимает 4 байта, это
32 бита. Самое большое положительное число в нем
равно 2147483647 и доступно как int.MaxValue.
Старший бит у знакового int показывает минус.
У верхней границы он равен нулю, остальные биты -
единицы. Следующая комбинация включает старший
бит и обнуляет остальные. Эти же биты читаются
как самое маленькое отрицательное число,
-2147483648.
В обычном unchecked-контексте переполнение
при операции над переменными не останавливает
программу: значение идет по кругу. Прибавим
единицу к int.MaxValue. После максимума
следует самое маленькое отрицательное, дальше
числа снова растут к нулю:
int num = int.MaxValue;
num = num + 1;
Console.WriteLine(num);
Дан следующий код:
int num = int.MaxValue;
num = num + 1;
Console.WriteLine(num);
Скажите, что выйдет на экран.
Соберется ли код с литералом int num = 2147483648;?
Есть число 2147483649. Помещается ли оно
в диапазон типа int как положительное?
Есть число 3000000000. Помещается ли оно
в диапазон типа int?
Какое самое большое положительное число хранит тип int?