ushort のオーバーフロー/アンダーフローを防ぐコードを書いていました。その前に私は試します:
ushort a = 0; //ushort.MinValue
a -= 1; //returns 65535 (ushort.MaxValue)
次に、実際のコードを書きますが、これが「失敗」することを期待しています (アンダーフローを検出できません)。
ushort oldValue, rate, delta;
ushort newValue = Math.Max(ushort.MinValue, oldValue - rate * delta);
興味深いことに、エラー (CS0266) により、ビルドできません。ushort Max(ushort, ushort)
C# はオーバーロードを使用することを期待していますが、オーバーロードを使用しint Max(int, int)
ており、ushort
値が自動的に変換されint
ます。もちろん、結果を明示的にキャストすると、ushort
これは正常に機能します。
これは、アンダーフローが発生する可能性があることをC#が検出しているのでint
、比較を行うために使用していると思いますか?