最小/最大バイトの範囲外にある場合、値をバイトにキャストするときに何が起こっているのか誰かが説明できますか? 整数値を取り、それを 255 でモジュロしているようです。これが例外をスローしない理由を理解しようとしています。
int i = 5000;
byte b = (byte)i;
Console.WriteLine(b); // outputs 136
最小/最大バイトの範囲外にある場合、値をバイトにキャストするときに何が起こっているのか誰かが説明できますか? 整数値を取り、それを 255 でモジュロしているようです。これが例外をスローしない理由を理解しようとしています。
int i = 5000;
byte b = (byte)i;
Console.WriteLine(b); // outputs 136
何が起こっているかというと、システムが適合させるために最上位バイトを削除しているということです。何が起こっているのかについてのかなり良い説明については、この StackOverFlow answerを見てください。
これが例外をスローしない理由を理解しようとしています。
オーバーフロー チェックのデフォルト設定はoffであるためです。
これを試してください、それはスローします:
checked
{
int i = 5000;
byte b = (byte)i;
Console.WriteLine(b);
}
短い形式は次のとおりです。
int i = 5000;
byte b = checked ( (byte)i );
Console.WriteLine(b);
いつも5000%256 = 136
のように overfull を取得します。
MSDNでも説明されています。オーバーフローが発生した場合は、checked()を使用して例外をスローします。こちらもお読みください: MSDN: Chapter 5: More About Variables