C#使用checked检查溢出

在进行数值类型之间的强制转换时,可能会丢失信息。比如将 int 类型转换为 short 类型时,如果 int 类型会的值大于 short 类型所能存储的最大值,那么就会发生溢出。

1、使用checked检查溢出

通常情况下,发生溢出时并不会自动抛出异常。这时我们就需要使用 checked 来检查溢出,当发生溢出时抛出异常。

1.1、未使用checked的情况
int a = 12345677;
short s = (short)a;
Console.WriteLine(s);
//输出:24909

这里发生了溢出,导致 s 的值发生了错误。但程序仍然可以正常执行,并没有抛出任何异常。

1.2、使用ckecked检查溢出

使用checked检查溢出并将其放在try语句块中来捕获异常。

try
{
    CheckeckedMethod();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

void CheckeckedMethod()
{
    checked
    {
        int a = 12345677;
        short s = (short)a;
        Console.WriteLine(s);
    }
}
//输出:Arithmetic operation resulted in an overflow.
2、使用unchecked语句禁用溢出检查

有时我们需要禁用溢出检查,就需要用到unchecked语句。

我们修改一下前面的代码,在 checked 语句块中加入了 unchecked 来禁止检查溢出。这时程序可以正常执行,但可以看出 s1 的值并不正确。

try
{
    CheckeckedMethod();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

void CheckeckedMethod()
{
    checked
    {
        int a = 123;
        short s = (short)a;
        unchecked
        {
            int num = 1234563;
            short s1 = (short)num;
            Console.WriteLine("s1: {0}", s1);
        }
        Console.WriteLine("s: {0}", s);
    }
}

//输出:
//	s1: -10621
//		s: 123

文章亦发表在个人网站,欢迎访问收藏:
BitsOf
C#使用checked检查溢出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值