System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
// 结果如下
1.7976931348623157E308
4.9E-324
9223372036854775807
-9223372036854775808
很明显上面的double表示的范围更大,但是我们都知道,double和long的存储字节都是8位,为什么表示的范围大不相同,远远不止是整数和浮点数之间的差距? 在进行了学习之后,我了解到,double与long表示范围的差距是由于存储结构的不同导致的,换句话说我们保存1000这个数,我们long要存储+1000,而double存储的是+1E3,拆开来看,存储一个数**double可以分成三部分,符号位,尾数为,指数位,**也就是用科学计数法来存储,这简单的1000就能看出差距,long存储1000需要符号位和数字位,需要5位而double存储,却只需要3位,同样一个数,double能够用更少的内存存储,所以多余的内存就能存储更多的数,因此double > long 总结:存储结构的差异,导致了double和long的存储字节都是8位,但double表示范围远大于long
|