バイト単位で保存されたニブル情報を使用して、大きな Int64 を構築しようとしました。
次のコード行は期待どおりに機能します。
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x100000000));
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x1000000));
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x100000));
次の行でコンパイル エラー CS0220 "チェック モードでのコンパイル時に操作がオーバーフローします" が発生し、他の行では発生しないのはなぜですか?
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x10000000));
結果は次のようになります。
FFFFFFFFD0000000
それ以外の:
0000D0000000
誰でもこれを説明できますか?シフト演算子で変換しますが、なぜこのアプローチがうまくいかないのか、まだ興味があります!
更新: (Int64)(0x0d << 28) を使用した場合にもエラーが発生します。