バイトで格納されたニブル情報を持つ大きなInt64を構築しようとしています。期待通りのコードの作業のC#でこの特定の操作がオーバーフローする(CS0220参照)のはなぜですか?
次の行:
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)を使用している場合にも発生します。
あなたはより速かった!回答が出たときに同じ答えを終えていた。 +1。完全にあなたの答えに同意します:) –
Heh。それは私にとってもいつも起こります。 :) とりあえずありがとう。 – Noldorin