checked и unchecked в C#
Блок checked бросает OverflowException при переполнении;
блок unchecked оставляет младшие биты (wrap-around). По умолчанию
арифметика в обычном коде - unchecked, если проект не включил
глобальный checked.
К int.MaxValue прибавляется единица внутри блока checked. Такое значение не помещается в int, поэтому возникает OverflowException:
int x = int.MaxValue;
try
{
checked
{
x = x + 1;
}
Console.WriteLine(x);
}
catch (OverflowException)
{
Console.WriteLine("overflow");
}
Покажите wrap-around в unchecked для MaxValue плюс один.
Оберните умножение больших int в checked и поймайте ошибку.