.net Int64がInt32のように動作するのはなぜですか?
-
06-07-2019 - |
質問
.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;
所属していません StackOverflow