【发布时间】:2009-08-19 15:35:55
【问题描述】:
当我不想要 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。
如果我对此有任何了解,那可能是文档对于晦涩的方法的重要性。
【问题讨论】:
-
我希望你在实际代码中有一个 try/catch 块?
-
不,我不知道。但是,我确实确保不会除以零。
-
关于您的编辑:您是否希望
int.MaxValue + 1(也等于 2147483648)溢出为零? -
不,我不会。无论如何,我想我已经解决了这个问题(尽管我认为检查它并不好)。谢谢你的帮助。如果有人为预期行为提出“干净”的解决方案,请随时发布。
标签: c# .net math overflowexception