递增超出整数限制的整数值 - C#

NLV*_*NLV 13 c# integer-overflow

我有一个for循环,它一直递增一个整数值,直到循环完成.因此,如果限制n是双变量并且递增变量'i'是整数,则i增加超出其限制.

 double total = 0;
 double number = hugetValue;
 for (int i = 1; i <= number; i++)
 {
    total = total + i;
 }
 return total;
Run Code Online (Sandbox Code Playgroud)

如果'i'超出其容量,会发生什么?我的价值如何变化?我会收到运行时错误吗?

谢谢

NLV

pax*_*blo 11

类似于C的一些实现中的行为,其中int刚刚从INT_MAX回绕到INT_MIN(尽管根据ISO标准它实际上是未定义的行为),C#也包装.在VS2008中测试它:

int x = 2147483647;
if (x+1 < x) {
    MessageBox.Show("It wrapped...");
}
Run Code Online (Sandbox Code Playgroud)

将导致消息框显示.

如果你的hugetValue值大于最大值int,那么你的循环将永远运行.

例如,如果它是2147483648,就像你认为你正在接近它一样,int2147483647回到包围-2147483648并且循环继续前进.