7


1

私は.netプログラムでの奇妙な振る舞いを目撃しています。

Console.WriteLine(Int64.MaxValue.ToString());
// displays 9223372036854775807, which is 2^63-1, as expected

Int64a = 256×256×256×127。 // OK

Int64a = 256×256×256×128。 //コンパイル時エラー
//"The operation overflows at compile time in checked mode"
// If i do this at runtime, I get some negative values, so the overflow indeed happens.

Int64.MaxValueが64ビットを使用していることを確認しているように見えますが、なぜ私のInt64はInt32のように振る舞うのですか?

関連性がある場合は、32ビットOSを使用しています。ターゲットプラットフォームは「Any CPU」に設定されています

2 Answer


20


あなたのRHSは Int32`値だけを使っているので、全体の演算は Int32`算術を使って実行され、それから `Int32`_result_はlongに昇格されます。

これに変更してください。

Int64 a = 256*256*256*128L;

そして、すべてうまくいくでしょう。


4


つかいます:

Int64a = 256L×256L×256L×128L。

接尾辞LはInt64リテラルを意味し、接尾辞なしはInt32を意味します。

あなたが書いたもの:

Int64 a = 256 * 256 * 256 * 128

手段:

Int64a =(Int32)256 *(Int32)256 *(Int32)256 *(Int32)128。