この奇妙な行動を私に説明できる人はいますか?
int i = 0x1234;
byte b1 = (byte)i;
byte b2 = (byte)0x1234; //error: const value '4660' can't convert to byte (use unchecked)
byte b3 = unchecked((byte)0x1234);
byte b4 = checked((byte)i); //throws
byte b5 = (byte)(int)0x1234; //error: same as above
注:これは空のコンソールアプリケーションであり、算術チェックは有効になっていません(デフォルトでは)。よろしくお願いします。
編集:私は十分に明確であるはずでしたが、すべてではありません。
単語がバイトに収まらないことを私は知っています。ただし、デフォルトでは、C#プログラムでは、主にパフォーマンス上の理由から、特定の「危険な」操作が許可されています。
同様に、2つの大きな整数を合計して、オーバーフローがまったくない場合があります。
私の不思議は、上記のコンパイル時エラーについてでした。b1キャスト/割り当てがコンパイルされ、b2がコンパイルできません。どちらも同じ値のInt32であるため、明らかに違いはありません。
それが今はっきりしていることを願っています。