请问 C#中的int是否没有溢出异常?

我在Euler项目(顺便说一句,很棒的网站)上遇到了第10个问题的怪异经历。任务是计算低于200万的所有素数之和。


我使用一个整数作为总和,我的算法产生了一个答案,但是当我粘贴它以验证答案时,这是错误的。


原来,结果太大而无法放入int中,但这是否会导致溢出错误或其他原因?相反,它只是返回了一个与实际答案相差很远的值。


当我将类型更改为long时,一切都是笨拙的。


慕标5832272
浏览 421回答 3
3回答

慕村225694

默认情况下,C#整数运算不会在溢出时引发异常。您可以通过项目设置或进行以下计算来实现checked:int result = checked(largeInt + otherLargeInt);现在该操作将抛出。相反的是unchecked,这使得任何操作都被显式取消。显然,这仅在项目设置中启用了选中的操作时才有意义。

波斯汪

在C#中,OverflowException不会引发(在VB中,默认情况下会引发异常)。为了获得排他性,您必须将代码嵌入checked上下文中:byte value = 241;checked{    try     {        sbyte newValue = (sbyte) value;        Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",             value.GetType().Name, value,             newValue.GetType().Name, newValue);    }    catch (OverflowException)     {        Console.WriteLine("Exception: {0} > {1}.", value, SByte.MaxValue);    }}       MSDN更详细地解释:为了使算术,转换或转换操作抛出OverflowException,该操作必须在检查的上下文中发生。默认情况下,将检查Visual Basic中的算术运算和溢出。在C#中,它们不是。如果操作发生在未经检查的上下文中,则结果将被舍弃,方法是丢弃所有不适合目标类型的高阶位。
打开App,查看更多内容
随时随地看视频慕课网APP