Постепенное увеличение целочисленного значения вне его целочисленного предела - C#

Я имею для цикла, который продолжает увеличивать целочисленное значение, пока цикл не завершается. Таким образом, если предел n является двойной переменной и увеличенной переменной, 'я' - целое число, я увеличен вне его пределов.

 double total = 0;
 double number = hugetValue;
 for (int i = 1; i <= number; i++)
 {
    total = total + i;
 }
 return total;

Что происходит со 'мной', если это превышает свою способность? Как значение я изменяюсь? Я получу ошибку периода выполнения?

Спасибо

NLV

13
задан paxdiablo 24 June 2010 в 07:51
поделиться

3 ответа

Подобно поведению в некоторых реализациях C, где int просто переходит от INT_MAX к INT_MIN (хотя на самом деле это поведение undefined согласно стандарту ISO), C # также оборачивается. Тестирование в VS2008 с:

int x = 2147483647;
if (x+1 < x) {
    MessageBox.Show("It wrapped...");
}

приведет к появлению окна сообщения.

Если ваше hugetValue больше максимального значения int , то из-за этого ваш цикл будет выполняться вечно.

Например, если это 2147483648 , то, когда вы думаете, что приближаетесь к нему, int переносится с 2147483647 обратно на -2147483648 и цикл просто продолжается.

11
ответ дан 2 December 2019 в 00:02
поделиться

Если вам нужно исключение, либо поставьте опцию компилятора checked, либо используйте конструкцию checked, предусмотренную в C#.

2
ответ дан 2 December 2019 в 00:02
поделиться

Приносим извинения, если это покажется грубым, но вы узнаете гораздо больше, попробовав это сами.

Отредактировано: ага, значит, вы попробовали и получили неожиданные результаты. Как объяснялось в другом месте, C-подобные языки обычно незаметно переносят целочисленную арифметику. На самом деле это вполне разумное поведение в целом, если стоимость проверки переполнения высока. Как только вы узнаете, что это может произойти, нужно внимательно кодировать, особенно наблюдая за конструкцией в вашем примере.

3
ответ дан 2 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: