第四个是个INT,不是LONG,如果声明LONG TYPE,必须在后面加L/l

解决方案 »

  1.   

    我的意思是,同样声明的都是LONG类型,为什么2147483647及一下可以不用加L,而大于2147483647的数值后面要加L
      

  2.   

    2楼正解
    int 最大2^31-1=2147483647
    long l1 = 2147483647;是把int型转型成long型给l1
    而2147483648无法容纳在int型里,只能用long型的描述方式,所以只能用2147483648l或2147483648L来描述,所以long l4 = 2147483648;出错
      

  3.   


    不错。
    而双精度默认是double型
      

  4.   

    对于整数,如果不加申明,系统会默认为int.而最后一个超出了范围,所以要加L指明是长整形
      

  5.   

    整数默认为INT型,而要转为LONG型则要向下转型,否则会出错
      

  6.   


    2147483647在int范围内,声明的时候自动类型转换成long了
    而2147483648就不在int范围了。声明的时候必须制定long类型。
      

  7.   

    “2147483647”本身默认为是个int类型的。同时这个数又是int类型的最大值.long l1 = 2147483647; //它之所以对,是因为它把2147483647默认为int类型,转换类型之后赋值给long类型的L1long l2 = 2147483647L; //它之所以对,是因为它把2147483647L当成一个long类型的数,赋值给long类型的L2long l3 = 2147483648L; //它之所以对,是因为 2147483648 本身就处在long类型的范围内,当成一个long类型的数,赋值给long类型的L3long l4 = 2147483648; //错    它之所以错,是因为2147483648 这个数默认是INT类型的,但是它超出了INT类型的范围,与L4无关。
      

  8.   

    这里确实 是把 2147483647 按 int 编译了。但是这里把一个大类型变成了小类型,有点疑惑。