質問

.netプログラムで奇妙な動作が見られます:

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

Int64 a = 256*256*256*127; // ok

Int64 a = 256*256*256*128; // compile time error : 
//"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」に設定されています

役に立ちましたか?

解決

ご使用のRHSは Int32 値のみを使用しているため、演算全体は Int32 演算を使用して実行され、次に Int32 result はlongに昇格されます。

これに変更:

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

そしてすべてが順調になります。

他のヒント

使用:

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

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

あなたの書いたもの:

Int64 a = 256*256*256*128

意味:

Int64 a = (Int32)256*(Int32)256*(Int32)256*(Int32)128;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top