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

时间:2010-06-24 07:43:01

标签: 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;

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

谢谢

NLV

3 个答案:

答案 0 :(得分:10)

类似于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和循环继续前进。

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

如果需要异常,请提供checked编译器选项,或使用C#中提供的checked结构。