c# - 奇怪的c#溢出错误

标签 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 . . .

谢谢!

最佳答案

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

将其更改为:

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

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

关于c# - 奇怪的c#溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/385966/

相关文章:

c# - 如何在不使用隐藏代码的情况下将 session 数据绑定(bind)到ascx中的标签

c# - Dal(带有 Entity Framework )和模型层进入 MVC

html - 在隐藏的溢出 div 内滚动 div

java - Java long 的 C++ 变体?

c - 不同平台上的打印类型有所不同

c - 十六进制数对于 long long int 来说太大了吗?

c# - 使用 .NET 解析类似 "Wednesday 13th January 2010"的日期

c# - "String or Binary Data Would be Truncated"使用 Linq to SQL 时出错

CSS3下拉菜单溢出问题

c - 如何通过分段或分页防止缓冲区溢出?