私は問題番号10で奇妙な経験をしましたプロジェクト オイラー(ちなみに素晴らしいサイトです)。課題は、200 万未満のすべての素数の合計を計算するというものでした。
合計に int を使用し、アルゴリズムによって答えが生成されましたが、答えを確認するためにそれを貼り付けると、間違っていました。
結果が大きすぎて int に収まらないことが判明しましたが、オーバーフロー エラーなどが発生するのではないですか? 代わりに、実際の答えからかけ離れた値が返されました。
タイプをロングに変更すると、すべて問題ありませんでした。
ベストアンサー1
C# の整数演算では、デフォルトではオーバーフロー時に例外はスローされません。プロジェクト設定または計算を実行することでこれを実現できますchecked
。
int result = checked(largeInt + otherLargeInt);
これで操作がスローされます。
その逆は でunchecked
、すべての操作を明示的にチェック解除します。明らかに、これはプロジェクト設定でチェックされた操作が有効になっている場合にのみ意味を持ちます。