gpt4 book ai didi

c# - 未经检查的 C# block 中的 System.OverflowException

转载 作者:行者123 更新时间:2023-12-03 14:41:14 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why dividing int.MinValue by -1 threw OverflowException in unchecked context?

(3 个回答)


8 个月前关闭。




如果我将 Int32.MinValue 和 -1 传递给 Divide()方法,我得到一个 System.OverflowException尽管阻塞发生在 unchecked堵塞。

    private static int Divide(int n, int d)
{
return unchecked (n / d);
}
这让我感到惊讶 - 除非我已经阅读了 documentation对于检查/未检查错误,我希望它只是给我一个溢出的输出(因为 Int32.MinValue/-1 = 2^31 = Int32.MaxValue + 1,我期望溢出到 Int32.MinValue 的值) .相反,它抛出了一个 OverflowException .
这是一个 DotNetFiddle显示问题。

最佳答案

From the C# draft specification on integer division :

If the left operand is the smallest representable int or long value and the right operand is -1, an overflow occurs. In a checked context, this causes a System.ArithmeticException (or a subclass thereof) to be thrown. In an unchecked context, it is implementation-defined as to whether a System.ArithmeticException (or a subclass thereof) is thrown or the overflow goes unreported with the resulting value being that of the left operand.


我不确定 Microsoft 在哪里列出了实现定义行为的选择,但显然他们在这里选择了第一个选项。
这个和其他实现定义或未定义的行为列在 ECMA-334 的附录 B 中。 .
上面的规范草案是最近更新的,但似乎缺少这个附件。

关于c# - 未经检查的 C# block 中的 System.OverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66067417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com