gpt4 book ai didi

c# - 如何停止在整数除法时抛出 OverflowException?

转载 作者:行者123 更新时间:2023-11-30 19:34:37 26 4
gpt4 key购买 nike

当我不想要它们(或者我认为如此)时,我得到了 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);

更新:

-2147483648/-1 的预期数学值为 2147483648。但是,这段特定代码并没有真正尝试找到该数字。这是一系列有点难以理解的位操作的一部分。老实说,我什至不知道自己的意图是什么,因为我并没有真正记录这个方法,而且只花了一天的时间就让我头顶上出现了严重的 WTF 泡沫。我所知道的是,它可以按预期工作,并使用旨在处理这种情况的特殊代码。

关于期望值:

由于 int 最多只能容纳 2147483647,因此我希望丢弃产生值 0 的溢出。

如果我对此有任何了解,那可能就是文档对晦涩方法的重要性。

最佳答案

我相信这是唯一您会得到此异常的情况。它是 Int32 范围内唯一可以溢出的除法。 (当然有被零除,但那是一个不同的异常(exception)。)

所以如果你想避免OverflowException,你需要处理这种情况。你想让它做什么?编写一个方法来识别这种确切的情况,否则进行正常除法。

注意:这也是为什么您不应该通过仅否定结果来尝试反转比较的原因。如果您想按降序而不是升序对某些内容进行排序,则不要使用 -Compare(x, y),而应使用 Compare(y, x)。否定不会int.MinValue 溢出(除非你在检查的上下文中) - 它只是默默地返回 int.MinValue .

关于c# - 如何停止在整数除法时抛出 OverflowException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1300777/

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