溢出异常抛出-即使值超过限制

Overflow exception is throwing- even the value exceeds the limit

为什么下面的代码给出输出 -2 而不是抛出 overflow exception?

 long x = long.MaxValue;
 long y = long.MaxValue + x;

实际行为取决于项目设置,unchecked等。为了确保溢出异常使用checked,例如

 checked {
   long x = long.MaxValue;
   long y = long.MaxValue + x;
 }

大概是因为您在 未检查 上下文中执行它。原始整数类型的运算可以在 checked or unchecked context 中执行。溢出的操作在已检查的上下文中抛出异常,而在未检查的上下文中仅使用底部的 N 位(取决于类型)。默认值取决于项目设置,但未选中 "default default"。

您可以显式在选中的上下文中执行操作,或者更改项目设置。

明确地做(只是为了算术):

long x = long.MaxValue;
long y = checked(long.MaxValue + x);

请注意,常量表达式在编译时进行检查,溢出将导致编译时错误,除非显式未检查(无论项目设置如何)。例如:

long x = long.MaxValue + 1; // Error
long y = unchecked(long.MaxValue + 1); // Equivalent to y = long.MinValue