最新消息:把Logo换了一下,虽然丑了点,但至少完全是自己的设计

C#中checked和unchecked关键字的使用

CSharp 宇托 229浏览 暂无评论

C#中checked和unchecked关键字用于数学计算中的溢出检查。在默认情况下,C#是不检查运算溢出的,当然可以通过VisualStudio的编译设置来设定全局范围的是否检查运算溢出。checked和unchecked关键字主要用于和全局设置不同的运算。比如当全局设置为不检查时,某一个运算需要检查溢出;或者全局设置为检查时,某一个运算不需要检查溢出。

在检查溢出时,如果发生运算溢出,会抛出OverflowException异常。

在使用checked和unchecked关键字要注意以下几个地方

编译型溢出无法使用checked和unchecked关键字

什么是编译型溢出,字面上说,就是在编译时发现溢出,比如把long附值给int。大概有以下几种:

  • 常量直接附值溢出。如int testVal = long.MaxValue;
  • 直接量直接附值溢出。如int testVal = 0xFFFFFFFFFF;
  • 常量计算后附值溢出。如int testVal = int.MaxValue + 1;。因为这种情况C#是在编译时计算的,而不是执行时计算。
  • 直接量计算后附值溢出。如int testVal = 0x60000000 * 2;。原理同上。

checked和unchecked关键字不仅可以用于单个运算,还可以用于语言块

checked和unchecked关键字不仅可以用于单个运算,还可以用于语言块。用于单个运算时用小括号,用于语言块时用大括号。如下代码:

C#
int testVal = 0x60000001;
int testValA = checked(testVal + 2);
int testValB = unchecked(testVal * 2);

int testValC = 0;
int testValD = 0;
checked
{
    testValC = testVal + 2;
    testValC = testValC + 200;
}

unchecked
{
    testValD = testVal * 2;
    testValD = testValD * 200;
}

checked和unchecked关键字不影响其标志范围内函数

checked和unchecked关键字会影响其标志范围内的运算,但不会影响其范围内的函数。如下代码

C#
using System;
using System.IO;
using System.Security.Cryptography;

class Test
{
    static void Main(string[] args)
    {
        int a = int.MaxValue;
        int b = 200;
        checked
        {
            int c = Add(a, b);
            Console.WriteLine(c);
        }
    }

    static int Add(int a, int b)
    {
        return a + b;
    }
}

参考地址:c# checked unchecked 关键字,在需要的时候请记得用他们两位

转载请注明:宇托的狗窝 » C#中checked和unchecked关键字的使用

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址