我在Euler项目(顺便说一句,很棒的网站)上遇到了第10个问题的怪异经历。任务是计算低于200万的所有素数之和。
我使用一个整数作为总和,我的算法产生了一个答案,但是当我粘贴它以验证答案时,这是错误的。
原来,结果太大而无法放入int中,但这是否会导致溢出错误或其他原因?相反,它只是返回了一个与实际答案相差很远的值。
当我将类型更改为long时,一切都是笨拙的。
默认情况下,C#整数运算不会在溢出时引发异常。您可以通过项目设置或进行以下计算来实现checked:
checked
int result = checked(largeInt + otherLargeInt);
现在该操作将抛出。
相反的是unchecked,这使得任何操作都被显式取消。显然,这仅在项目设置中启用了选中的操作时才有意义。
unchecked