OverflowExceptionが必要ないときにスローされます(またはそう思います)。オーバーフローしたビットを破棄して、値がオーバーフローすると予想されるいくつかの奇妙な計算を実行しています。ただし、これを適切に機能させることはできないようです。基本的にこれは、巨大なセット (int.MinValue から int.MaxValue へ) を反復するときに発生する i と j の 1 つのペアです。
// 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 です。ただし、この特定のコードは実際には数値を見つけようとはしません。これは、理解するのが少し難しくなった一連のビット操作の一部です。正直なところ、私はその方法を実際に文書化していなかったので、その意図が何であったかさえ知りませんでした. ケースを処理するように設計された特別なコードで意図したとおりに機能することはわかっています。
期待値について:
int は最大で 2147483647 しか保持できないため、オーバーフローを破棄して値 0 を生成することを期待しています。
これについて何か学んだことがあるとすれば、それはおそらく、あいまいなメソッドのドキュメントの重要性です。