Отрицательное число int из исключения означает больше, чем просто число? - PullRequest
0 голосов
/ 29 марта 2012

Действительно простой код:

int number = int.MaxValue;
    number = number+1;
Console.WriteLine(number);

Вопросы:

1) должно быть исключение overflowException. нет почему это?

2) Показывает ли число -2147483648 что-то о:

  • ) Сколько байтов превышает предельный размер?

  • ) если я вижу -2147483648, Как я могу узнать (если не было исключения) - если это число произошло из исключения? - Должен ли я обернуть его с Try Catch?

p.s. когда я написал:

int number = int.MinValue;
    number = number-1;
Console.WriteLine(--number);

Я получил: 2147483647 (все еще не исключение).

Ответы [ 4 ]

7 голосов
/ 29 марта 2012

Должно быть исключение 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
1 голос
/ 29 марта 2012

int имеет минимальное значение и максимальное значение.Если вы переполняете максимальное значение, оно просто возвращается к минимальному значению.

Пример:

int не может иметь числа от -10 до 10. int i = 8;// 8 i ++;// 9 i ++;// 10 i ++;// -10 i ++;// -9 i - = 2;// 10 i + = 10;// -1

Чтобы получить исключение переполнения, используйте блок проверки, поскольку по умолчанию он не проверен.

checekd
{
    int i = int.MaxValue;
    i++; // throws
}
1 голос
/ 29 марта 2012

Указывает ли число -2147483648 что-то о:

Это минимальное значение. Когда вы переполнитесь, вы обернетесь, поэтому maxValue+1 == MinValue, MaxValue + 2 == MinValue + 1 и т. Д. Та же логика применяется в другом направлении; MinValue - 1 == MaxValue.

1 голос
/ 29 марта 2012

Оберните его в блок checked, чтобы получить исключение.Арифметическое переполнение по умолчанию не проверено.

...