Должно быть исключение overflowException. нет почему это?
По умолчанию C # не выполняет проверку переполнения. Вы можете включить его для всей сборки (в бите «Дополнительно» на вкладке сборки в VS или /checked+
из командной строки) или для блока / выражения, используя ключевое слово checked
Для второй части вашего вопроса, -2147483648
это просто int.MinValue
- целые числа со знаком делают это, переходя от очень большого положительного числа к очень большому отрицательному числу.
Например, если вы используете sbyte
(тип байта со знаком):
sbyte number = 127; // sbyte.MaxValue
number++;
Console.WriteLine(number); // Prints -128
Здесь ничего смешного не происходит - это просто нормальное дополнение 2 * переполнение.
Или используя byte
(без знака)
byte number = 255; // byte.MaxValue
number++;
Console.WriteLine(number); // Prints 0