首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这不应该导致溢出吗?不是的!

这不应该导致溢出吗?不是的!
EN

Stack Overflow用户
提问于 2010-05-29 17:13:41
回答 4查看 993关注 0票数 33

不管怎样,这是怎么回事?我做一个简单的乘法:

代码语言:javascript
复制
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;

在乘法的末尾,z显示一个值:

-5670418394979206991

这显然已经溢出,但没有引发异常。我想养一个但是..。

请注意,这是在Windows phone7上,但我不认为这对这个问题有任何影响。或者真的是这样?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-29 17:23:52

您可以使用其他答案已经指出的选中块:

代码语言:javascript
复制
checked
{
    long x = 11111111111;
    long y = 11111111111;
    long z = checked(x * y);
    // ...
}

这会导致一个异常:

OverflowException:算术运算导致溢出。

如果您只是在执行需要检查的单个操作,则可以使用checked expression

代码语言:javascript
复制
long x = 11111111111;
long y = 11111111111;
long z = checked(x * y);

您还可以将/checked compiler option设置为选中默认值。

在Visual Studio开发环境中设置此编译器选项的

  1. 打开项目的属性页对话框。有关详细信息,请参见Setting Visual C# Project Properties.
  2. Click folder.
  3. Click Build属性页的配置属性。
  4. 修改算术溢出/下溢property.

检查

如果将缺省值更改为已检查,则可以使用未检查的块或表达式再次获取未检查的行为。

票数 43
EN

Stack Overflow用户

发布于 2010-05-29 17:16:40

Check it

代码语言:javascript
复制
checked
{
    Int64 x = 11111111111;
    Int64 y = 11111111111;
    Int64 z = x * y;
}
票数 26
EN

Stack Overflow用户

发布于 2010-05-29 17:17:18

尝试:

代码语言:javascript
复制
checked
{
    Int64 x = 11111111111;
    Int64 y = 11111111111;
    Int64 z = x * y;
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2934467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档