Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 整数溢出异常_C#_.net_Integer Overflow - Fatal编程技术网

C# 整数溢出异常

C# 整数溢出异常,c#,.net,integer-overflow,C#,.net,Integer Overflow,我在此处遇到编译器错误的原因: int a = 2147483647 + 10; 而不是在这里,如果我正在执行相同的操作: int ten = 10; int b = 2147483647 + ten; 我正在学习选中的的用法,MSDN网站不清楚为什么在第一个代码段中出现OverflowException: 默认情况下,仅包含常量值的表达式会导致 如果表达式生成的值超出 目标类型的范围。如果表达式包含一个或多个 非常量值,编译器不会检测到溢出 它只是解释了行为,而不是行为的原因。我想知道引擎

我在此处遇到编译器错误的原因:

int a = 2147483647 + 10;
而不是在这里,如果我正在执行相同的操作:

int ten = 10;
int b = 2147483647 + ten;
我正在学习选中的的用法,MSDN网站不清楚为什么在第一个代码段中出现OverflowException:

默认情况下,仅包含常量值的表达式会导致 如果表达式生成的值超出 目标类型的范围。如果表达式包含一个或多个 非常量值,编译器不会检测到溢出


它只是解释了行为,而不是行为的原因。我想知道引擎盖下发生了什么。

原因是当你有
int a=2147483647+10编译器可以预测语句(
a
)的结果,它会知道它会导致溢出,因为214748364710都是常量,它们的值在编译时是已知的

但是当你有

int ten = 10;
int b = 2147483647 + ten;

在执行
int b=2147483647+ten之前,其他一些线程(或其他一些线程,可能是向导,可能是内存中的危险…)可能已经更改了
ten
的值语句,在编译时无法预测溢出。

以30秒的优势获胜。。。你跑得很快+1那么,编译器在计算这两个数字时会抱怨,但在计算数字和变量“十”时不会抱怨。您必须使用checked来识别该案例中的溢出。这有点不连贯,不是吗?如果您想要相同的行为(在运行时),只需选中项目设置中的复选框,使其默认为“选中”,而不是“未选中”,或者将代码包装在选中的块
checked{int ten=10;int b=2147483647+ten;}
,这也会在运行时引发相同的错误。您无法在编译时获取该行为。它不会强制执行相同的行为,编译器不会为检查版本的
int b=2147483647+ten给出编译错误任意一个@ScottChamberlain@ScottChamberlain我明白了,高级设置:“检查算术溢出/underfow”t您得到的是编译器错误,而不是第一种情况下的异常。