JAVA里long类型的取值范围问题,结果第六次就是0了

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了呢?应该没超范围吧?

第1个回答  2015-02-01
还真是超了。。别忘了还有一位符号位。
题主可以试试输出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次值就已经不对了

本回答被提问者和网友采纳

java中long类型的取值范围到底是多少呢?
还有,LONG最大值是9223372036854775807。

java long与int取值范围的问题
结果就是0了

java中long类型的取值范围到底是多少呢?
long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)。

java中long类型的取值范围到底是多少
解释:long类型是64位的也就是 ”-2^64“ 到”2^64 -1“.

Java基本类型中的long存储范围是多少?
你好,java中long的取值范围是-9223372036854775808 - 9223372036854775807 使用代码可以查看Long.MIN_VALUE、Long.MAX_VALUE,你的这里应该是和进制有关,最大应该是16进制也就是0x 希望可以帮助到你

JAVA中8个数据类型的取值范围是多少?
long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1);可以看到byte和short的取值范围比较小,而long的取值范围太大,占用的空间多,基本上int可以满足我们的日常的计算了,而且int也是使用的最多的整型类型了。在通常情况下,如果JAVA中出现了一个整数...

java中基本数据类型的值范围
在JAVA中一共有八种基本数据类型,分别是 byte、short、int、long、float、double、char、boolean ,进一步划分的话,又可以分为整型,浮点型,boolean型和char型,每种数据类型都有自己的值范围 1、整型包括byte、short、int、long四种,其取值范围整理如下图 2、浮点型根据精度的不同分为float和double...

java 中byte.short,int,long,float,double 的取值范围分别是多少?
long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)float和double是表示浮点型的数据类型,他们之间的区别在于他们的精确度不同 float 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)占用4个字节 dou...

JAVA四种整数数据类型的取值范围分别是多少
-2的7次方到2的7次方-1)short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)...

java中为什么我Scanner不能输入long型数据
其实不必加l或L的,它自己会Scans the next token of the input as a long. 的 比如long的最大取值范围是9223372036854775807你输入这个数不加L他不会报错,但是你加个1溢出它就报错了 至于你说的输入一个超过int范围的数就会报错,应该不可能吧?输入那个值?

相似回答