JAVA里long类型的取值范围问题,结果第六次就是0了
publicclassTestDieDai{publicstaticvoidmain(String[]args){longa=2L;for(inti=1;i<=8;i++...
public class TestDieDai {
public static void main(String[] args) {
long a=2L;
for(int i=1;i<=8;i++){
a=a*a;
System.out.println("第"+i+"次:"+a);
}
}
}
我这么写的代码,运行后的结果为:
第1次:4
第2次:16
第3次:256
第4次:65536
第5次:4294967296
第6次:0
第7次:0
第8次:0
我用的类型是long呀,怎么第六次开始就是0了呢?应该没超范围吧? 展开
public static void main(String[] args) {
long a=2L;
for(int i=1;i<=8;i++){
a=a*a;
System.out.println("第"+i+"次:"+a);
}
}
}
我这么写的代码,运行后的结果为:
第1次:4
第2次:16
第3次:256
第4次:65536
第5次:4294967296
第6次:0
第7次:0
第8次:0
我用的类型是long呀,怎么第六次开始就是0了呢?应该没超范围吧? 展开
若以下回答无法解决问题,邀请你更新回答
展开全部
还真是超了。。别忘了还有一位符号位。
题主可以试试输出Long.MAX_VALUE.就知道了
题主可以试试输出Long.MAX_VALUE.就知道了
追问
什么符号位呀,初始值我要改成long a=3L,就会变成:
第1次:9
第2次:81
第3次:6561
第4次:43046721
第5次:1853020188851841
第6次:8733086111712066817
第7次:-9204772141784466943
第8次:-3310041070528564223
第五次就比上面的大了。
追答
这是我用浮点数算出来的,题主可以去验证
2^63 = 9.22337204 × 10^18 这个是long的最大值
4294967296^2 = 1.84467441 × 10^19
1853020188851841^2 = 3.43368382 × 10^30 从3开始的第6次值就已经不对了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询