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

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

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

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

谢谢

NLV

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

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

将导致消息框显示。

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

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

抱歉,如果这看起来很粗鲁,但你会通过自己尝试来学到更多。

编辑:啊哈,所以你尝试了,并得到了意想不到的结果。 正如其他地方所解释的那样,类C语言倾向于安静地包装整数运算。 如果检查溢出的成本很高,那实际上这是一个非常合理的行为。 一旦你知道这可能会发生一个代码,特别是在你的例子中观察构造的类型。

如果需要exception,请提供已checked编译器选项,或使用C#中提供的已checked构造。