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了呢?应该没超范围吧?
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
WM_THU
2015-02-01 · TA获得超过7164个赞
知道大有可为答主
回答量:4285
采纳率:80%
帮助的人:3936万
展开全部
还真是超了。。别忘了还有一位符号位。
题主可以试试输出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次值就已经不对了
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式