java long与int取值范围的问题
1:longl=1024*1024*1024*4;//02:inti1=1024*1024*1024*4;//03:inti2=220000000000;//错误4:lo...
1:long l = 1024*1024*1024*4; //0
2:int i1 = 1024*1024*1024*4; //0
3:int i2 = 220000000000; //错误
4:long l1 = 220000000000; //错误
5:long l1 = 220000000000L; //正确
1-4都是超过int(-2^31 — 2^31-1)的范围,为什么1-2不报错且值是0,而3-4却是错的呢?
根据"直接量"不超过范围,可以直接赋值。根据这个原则。
以1-4为例,这个范围是 "直接量"的自身范围(int范围)还是被赋值方的范围(long范围)呢?
求解答,谢谢!
Integer.MAX_VALUE + 1 ,这样不报错,-2147483648
2147483648,这样就直接报错。
long l = 1024*1024*1024*4; 结果是0
long l = 4294967296; 这样就直接报错。
1024*1024*1024*4 = 4294967296,它们是相等的
真的有点蒙了! 展开
2:int i1 = 1024*1024*1024*4; //0
3:int i2 = 220000000000; //错误
4:long l1 = 220000000000; //错误
5:long l1 = 220000000000L; //正确
1-4都是超过int(-2^31 — 2^31-1)的范围,为什么1-2不报错且值是0,而3-4却是错的呢?
根据"直接量"不超过范围,可以直接赋值。根据这个原则。
以1-4为例,这个范围是 "直接量"的自身范围(int范围)还是被赋值方的范围(long范围)呢?
求解答,谢谢!
Integer.MAX_VALUE + 1 ,这样不报错,-2147483648
2147483648,这样就直接报错。
long l = 1024*1024*1024*4; 结果是0
long l = 4294967296; 这样就直接报错。
1024*1024*1024*4 = 4294967296,它们是相等的
真的有点蒙了! 展开
5个回答
展开全部
首先 不如果不加L在后面标明 默认是int型
所以4是错误的 5是正确的
3明显溢出 不讨论
1与2主要涉及到乘法的问题
java在相乘之前不知道你的结果是否溢出
只有在乘的时候才知道
所以乘完后结果自动转换到长整形
而你又把他赋值给整形变量
所以他自动截取了后面的部分
结果就是0了
所以4是错误的 5是正确的
3明显溢出 不讨论
1与2主要涉及到乘法的问题
java在相乘之前不知道你的结果是否溢出
只有在乘的时候才知道
所以乘完后结果自动转换到长整形
而你又把他赋值给整形变量
所以他自动截取了后面的部分
结果就是0了
追问
long l1 = Integer.MAX_VALUE + 1 ,这样不报错,-2147483648
long l2 = 2147483648,这样就直接报错。
这样是不是跟乘法一样道理啊?
追答
是的
他会先向上转型
然后截取部分
展开全部
都是对的。1 2不报错因为编译通过,运行时值是0,因为赋值时超出了int类型和long类型的范围,应该是后台自己处理超出范围的数导致的结果。 3 报错是因为编译时就判断错已经超出范围,4错是因为右边的数 java声明一个基本类型时默认是int类型,22000000...超出了int的范围,报错。5加一个L显示声明它是一个long类型的,在long的范围内。所以对的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为默认的整数都是int型的,你1-2都是向上转型,当然没错啦……是0是因为1024*1024*1024*4
是int型的最大值加一的结果,就是-1加1的结果。你可以把1式子改成
long l=1024*1024*1024*4L,运行下就可以看出来了
是int型的最大值加一的结果,就是-1加1的结果。你可以把1式子改成
long l=1024*1024*1024*4L,运行下就可以看出来了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以说试试这样:
long l = 1024*1024*1024*4 -1;
l=l+1;
long l = 1024*1024*1024*4 -1;
l=l+1;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义的时候类型不会自动向上转换,运行的时候会自动向上转换。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |