check和unchecked整数算术

当int类型  2147483647加上一个int型的1时C#编译器会生成代码,允许计算机悄悄地溢出,结果会是- 2147483648(最大值加上1会溢出最大负数值勤- 2147483648),如果为每个整数表达式溢出检查会赞成性能下降,这时可启用或禁用检查功能,(项目-"yourProject属性"选项-生成卡片(右下角的"高级"按钮,在高级生成设置对话框中,勾选检查运算上溢/下溢选项

 不管应用程序如何,都可用checked和uncheckd关键字,选择性打开和关闭程序特定部分溢出检查,这些关键字将会覆盖编译器选项

checked语句

checked块中的任何溢出都有会招聘一个OverflowException异常

int number = Int32.MaxValue;

checked
{

int  willThrow = number++;

Console.WriteLine("this won't be reached");

}

也可单独整数表达式int wontThrow = checked(Int32.MaxValue+1)

unchecked语句

int number = Int32.MaxValue;

unckecked

{

int wontThrow = number++;

Console.WriteLine("this will be reached");

}也可单独整数表达式int wontThrow = unchecked(Int32.MaxValue+1)

private int multiplyValues(int leftHandSide, int rightHandSide)

        {

            expression.Text = leftHandSide.ToString() + " * " + rightHandSide.ToString();

            return leftHandSide * rightHandSide;

        }

 

这个代码块会悄悄溢出了int 类型32位限制,会输出一个负值

 

private int multiplyValues(int leftHandSide, int rightHandSide)

        {

            expression.Text = leftHandSide.ToString() + " * " + rightHandSide.ToString();

            return checked(leftHandSide * rightHandSide);

        }

这个代码块会抛出一个OverflowExce

 

 

重要提示:   不能使用checked和unchecked关键字来控制浮点(非整数)运算.只能控制整数运算,浮点运算永远不会抛出OverflowException--即使你用0.0来除一个浮点数(.NET Framework有专门表示无穷大的机制)

 

 

catch (OverflowException ex)

            {

                result.Text = ex.Message;

            }

在Result文本框上显示"算术运算导致溢出"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值