本文介绍了为什么除以int.MinValue -1在unchecked上下文中扔OverflowException异常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
int y = -2147483648;
int z = unchecked(y / -1);
第二行导致发生OverflowException
。不应该选中
防止这种
例如:
int y = -2147483648;
int z = unchecked(y * 2);
不会导致异常。
doesn't cause an exception.
推荐答案
在C#4规格第7.72(除法运算符)规定:
Section 7.72 (Division Operator) of the C# 4 specs states:
如果左操作数是最小int或long值,右操作数为-1,发生溢出。在checked上下文中,[...]。在unchecked上下文中,是实现定义一个System.ArithmeticException(或其子类)是否被抛出或溢出去与所得到的值是它的左边操作数未报告来。
所以,这个抛出unchecked上下文中的异常的事实其实也不是一个错误,因为该行为是实现定义的。
So the fact that this throws an exception in an unchecked context is not in fact a bug, since the behavior is implementation-defined.
这篇关于为什么除以int.MinValue -1在unchecked上下文中扔OverflowException异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!