有人能解释我在变量溢出的原因是什么?注意,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 . . .

谢谢!

有帮助吗?

解决方案

在RHS是 INT 乘法因为表达式的每一个部分是一个int。只是因为它是被分配到一个长并不意味着它与长算术执行。

其更改为:

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

和它会工作。 (所不同的是将L在第一1024的端部。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top