質問

誰かが私の変数にオーバーフローの理由を説明できますか? bがより大きいことに注意してください。

static void Main(string[] args)
{
     int i = 2;    
     long a = 1024 * 1024 * 1024 * i;
     long b = 12345678901234567;
     System.Console.WriteLine("{0}", a);
     System.Console.WriteLine("{0}", b);
     System.Console.WriteLine("{0}", long.MaxValue);
}

-2147483648
 12345678901234567
 9223372036854775807
 Press any key to continue . . .

ありがとうございます。

役に立ちましたか?

解決

式のすべての部分がintであるため、

RHSはのint型の乗算です。それは長い間に割り当てられていますからといって、それが長い算術で行われていますという意味ではありません。

に変更します:

long a = 1024L * 1024 * 1024 * i;

と、それは動作します。 (差は最初の1024の端部にLである。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top