7

有人能解释一下变量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 . . .

谢谢!

4

1 回答 1

26

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

将其更改为:

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

它会起作用的。(不同的是第一个 1024 末尾的 L。)

于 2008-12-22T10:44:58.443 回答