奇怪的c#溢出错误

7 c# overflow long-integer

有人能解释一下变量a溢出的原因吗?请注意,b大于a.

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 . . .
Run Code Online (Sandbox Code Playgroud)

谢谢!

Jon*_*eet 26

RHS是一个int乘法,因为表达式的每个部分都是int.仅仅因为它被分配给长并不意味着它是用长算术执行的.

将其更改为:

long a = 1024L * 1024 * 1024 * i;
Run Code Online (Sandbox Code Playgroud)

它会工作的.(区别在于第一个1024末尾的L.)