如何在整数除法上停止抛出OverflowException?

Sta*_*ent 2 .net c# math overflowexception

我得到OverflowException异常的扔给我时,我不希望他们(或因此我认为).我正在执行一些奇怪的计算,我希望值溢出,丢弃溢出的位.看来我不能让这个工作正常.基本上这是一对i和j,当我迭代大集合(int.MinValue到int.MaxValue)时发生.

// i and j are ints
// i is -2147483648
// j is -1
var x = i / j;

// I also tried using unchecked keyword, but it doesn't help    
var x = unchecked(i / j);
Run Code Online (Sandbox Code Playgroud)

更新:

预期的数学值-2147483648/-1是2147483648.但是,这个特定的代码并没有真正尝试找到这个数字.这是一系列比特操纵事情的一部分,有点难以理解.说实话,我甚至不知道自己的目的是什么,因为我没有真正记录这个方法,而且只需要一天时间就可以在我脑海中引发严重的WTF泡沫.所有我知道它的工作原理与设计用于处理案例的特殊代码.

关于预期价值:

因为int只能保持2147483647的最大值,所以我希望丢弃溢出值Y值.

如果我对此有所了解,那么对于模糊方法来说,这可能是文档的重要性.

Jon*_*eet 6

我相信这是唯一可以获得此异常的情况.它是Int32范围内唯一可以溢出的区域.(当然,除以零,但这是一个不同的例外.)

所以如果你想避免OverflowException需要处理这种情况.你想要它做什么?写一个方法,找出这个确切的情况,否则做正常的划分.

注意:这也是为什么你不应该试图通过否定结果来反转比较.如果你想按降序排序而不是升序,那么而不是使用-Compare(x, y)use Compare(y, x).否定不会给溢出int.MinValue(除非你在检查的上下文中) - 它只是默默地返回int.MinValue.