奇怪的c#溢出错误
有人能解释一下变量a溢出的原因吗?注意,b比a大奇怪的c#溢出错误,c#,overflow,long-integer,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.Consol
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是一个整数乘法,因为表达式的每一部分都是一个整数。仅仅因为它被分配给一个long,并不意味着它是用long算术执行的
将其更改为:
long a = 1024L * 1024 * 1024 * i;
它会起作用的。(区别是第一个1024结尾的L。)如果运行时看到表达式将以长格式存储,那么它可能会更灵活,并自动“扩展”计算?@Petar:我认为这是个坏主意。这将使语言更加复杂。很容易避免这个问题,而且它保持了语言的简单性——在一些地方,表达式的含义取决于其上下文(例如lambda表达式),但我不想看到更多。