算术溢出

使用/checked+编译器开关,CLR会检查算术溢出。发生溢出会抛出OverflowException

可以在代码特定区域进行溢出检查或不进行溢出检查。
UInt32 a = unchecked((UInt32) (-1));
UInt32 b = checked((UInt32) (-1));

也可以定义checked或unchecked语句块
checked
{

}
unchecked
{

}

checked或unchecked只决定生成的IL指令,在checked操作符或语录块中调用方法,不会对该方法产生任何影响。

System.Decimal不是CLR基元类型,checked或unchecked对其无效,当运算溢出时总会抛出OverflowException异常。

System.Numberics.BigInteger表示任意大整数,永远不会抛出OverflowException异常,但可能因内存不足抛出OutOfMemoryException异常。

Posted in C#

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据