这到底是怎么回事?我做了一个简单的乘法:
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
在乘法结束时,z 显示的值为:
-5670418394979206991
这显然已经溢出,但没有引发异常。我想养一个,但是...
请注意,这是在 Windows Phone 7 上,但我认为这与问题没有任何关系。或者是吗?
这到底是怎么回事?我做了一个简单的乘法:
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
在乘法结束时,z 显示的值为:
-5670418394979206991
这显然已经溢出,但没有引发异常。我想养一个,但是...
请注意,这是在 Windows Phone 7 上,但我认为这与问题没有任何关系。或者是吗?
您可以使用其他答案已经指出的检查块:
checked
{
long x = 11111111111;
long y = 11111111111;
long z = checked(x * y);
// ...
}
这导致异常:
OverflowException:算术运算导致溢出。
如果你只是在做一个需要检查的操作,你可以使用一个检查的表达式:
long x = 11111111111;
long y = 11111111111;
long z = checked(x * y);
您还可以设置/checked 编译器选项以检查默认值。
要在 Visual Studio 开发环境中设置此编译器选项:
- 打开项目的属性页对话框。有关详细信息,请参阅设置 Visual C# 项目属性。
- 单击配置属性文件夹。
- 单击构建属性页面。
- 修改检查算术上溢/下溢属性。
如果将默认值更改为选中,则可以使用未选中的块或表达式再次获得未选中的行为。
检查它:
checked
{
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
}
尝试:
checked
{
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
}
编译器假设您想这样做并继续溢出。如果需要将溢出视为操作异常,请将操作包装起来checked
,它将在运行时抛出异常。
checked
{
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
}
System.OverflowException:引发了 System.OverflowException 类型的异常。