我有一个for循环,它继续递增一个整数值,直到循环完成。因此,如果限制n是一个双变量并且递增的变量'i'是一个整数,则i会增加超出其限制。
double total = 0;
double number = hugetValue;
for (int i = 1; i <= number; i++)
{
total = total + i;
}
return total;
如果'i'超出其容量会发生什么?我的价值如何变化?我会收到运行时错误吗?
谢谢
NLV
答案 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
,就像您认为接近它一样,int
从2147483647
回绕到-2147483648
和循环继续前进。
答案 1 :(得分:3)
道歉,如果这看起来很粗鲁,但你会通过自己尝试来学习更多。
编辑:啊哈,所以你尝试了,并得到了意想不到的结果。正如其他地方所解释的那样,类C语言倾向于安静地包装整数运算。如果检查溢出的成本很高,那实际上这是一个非常合理的行为。一旦你知道这可能会发生一个代码,特别是在你的例子中观察构造的类型。
答案 2 :(得分:2)
如果需要异常,请提供checked
编译器选项,或使用C#中提供的checked
结构。