小数点がバイト(0〜255)の範囲外にある場合、小数点から1バイトへの明示的な変換はdocumented to throw this exceptionです。
オーバーフロー例外:値がByte.MinValueより小さいか、 Byte.MaxValueより大きい。
、2行目には、あなたは値が黙ってラップしていることに気付かれるべき、wilma
は0であるので、その法的な変換でデータ損失があります。上記と同じ振る舞いがuint-to-byte積分変換で表示されるようにするには、チェックされたコンテキストで実行します。
checked
{
uint fred = 32768;
byte wilma = (byte)fred;
}
未チェックのコンテキストでは、整数型間の変換ではオーバーフローが無視されます。高位ビットは破棄されます。 (参照:C#言語仕様のセクション4.1.5)を
確認及び未確認オペレータやステートメントは一体型の算術演算及び コンバージョン(§7.6.12)をチェック オーバーフローを制御するために使用されます。チェックされたコンテキストでは、オーバーフローによって コンパイル時エラーが発生するか、System.OverflowExceptionがスローされます。 チェックされていないコンテキストでは、オーバーフローは無視され、宛先タイプに適合しない上位ビットのビット は破棄されます。
これらの問題を回避するために、保存するデータに適したタイプを使用してください。データがbyte
の範囲を超える場合、はより大きなタイプのを使用します。整数型と浮動小数点数の間の変換は、後者の値の範囲が整数の範囲をはるかに超えることがあり、もちろん小数点以下のデータの損失は避けられないため、特に問題があります。
ただし、十進数からバイトへの変換を継続して使用する場合は、byteの最小値と最大値を念頭に置いて(比較する)必要があります。