C#的long最大值应该是9223372036854775807 (2^63 -1),现在为什么下面的代码产生错误。        long a = 2147483647 + 1;//(int型的最大值加1)
        
编译错误 
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。 编译器错误信息: CS0220: 在 checked 模式下,运算在编译时溢出源错误: 行 14:     protected void Page_Load(object sender, EventArgs e)
行 15:     {
行 16:         long a = 2147483647 + 1;
行 17:         this.Response.Write(a);
行 18:     }
 源文件: d:\website\sy\sy\sy2.aspx.cs    行: 16 这应该在checked 模式也不会有错啊。求助。

解决方案 »

  1.   

    long a = (long) 2147483647 + 1;
      

  2.   

    出错是因为中间运算结果是Int ,所以溢出
    不是说你的a溢出
      

  3.   

    我认为,
       long a = 2147483647 + 1;
    中, 2147483647  和 1都是int型, 所以先对他们运算,很明显, 都是int,就是会进行转换,所以相加时必然会溢出,如果用
       long a = (long)2147483647 + (long)1;
    就是会有错了.
    checked模式,好像就是检查这种问题的
      

  4.   

    都是int,就是会进行转换==>都是int,就不会进行转换