递增超出整数限制的整数值 – 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
,就像你认为你接近它一样, int
从2147483647
回绕到-2147483648
并且循环继续前进。
抱歉,如果这看起来很粗鲁,但你会通过自己尝试来学到更多。
编辑:啊哈,所以你尝试了,并得到了意想不到的结果。 正如其他地方所解释的那样,类C语言倾向于安静地包装整数运算。 如果检查溢出的成本很高,那实际上这是一个非常合理的行为。 一旦你知道这可能会发生一个代码,特别是在你的例子中观察构造的类型。
如果需要exception,请提供已checked
编译器选项,或使用C#中提供的已checked
构造。
上述就是C#学习教程:递增超出整数限制的整数值 – C#分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1016600.html