在java中,long和double表示的是2种不同的基本数据类型,long可以说是int的扩展,double是float的扩展。
那么,为什么long和double占用内存空间相同,而数据表示的范围却不同呢?
Long:整型,8字节(64bit)
存储形式:第一位表符号位(1表示负数,0表示正数),后面的表值
例如:(声明一个long,如:longlong1=1L)下面默认64位操作系统,采用补码
如下图所示,可以看出long在内存中的二进制
它的取值范围为:[-9223372036854775808,9223372036854775807]=[-2^63,2^63-1]
Double:双精度浮点型,8字节(64bit)
但是同样的64bit,存储方式却不一样,如下表:
存储形式:第1位符号位,2-12位表阶码位,13-64位表小数位
值范围:[4.9E-324,1.7976931348623157E308]
例如: