首先,为了知道原因,我们需要知道这两种数据类型在算机当中的存储方式是怎样的
目录
一.数据类型
知道数据类型分为引用类型和基本数据类型。在基本数据类型中有整型(byte, short, int, long),浮点型(float, double),字符型,还有布尔类型(boolean)
其中整型long的长度为八个字节,而浮点类型float长度却是四个字节。但是为什么四个字节的浮点类型float比八个字节的整形浪取值范围要大呢?
那么我们来看看它们两个在计算机当中的存储方式是怎样的吧:
1.整型:
1.整型数据的字节大小
数据类型 字节大小
byte 1
short 2
int 4
long 8
2.long的取值范围
我们知道,在计算机中一个字节储存8位的二进制的数字,并且整型当中最左边一位是符号位,0代表正数,1代表负数,其他的用来储存数字大小,拿byte类型举例,他的取值范围就是1111 1111(-128,也就是-2^7)------01111 1111(127,需要-1,也就是2^7),同理,我们可以得出long的取值范围是-2^63-----2^63.
2.浮点型
1、float类型数字在计算机中用4个字节(32位)存储。
遵循IEEE-754格式标准:
一个浮点数由3部分组成:符号位s(1位)和、指数e(8位)、底数m(23位)
2、格式
S:符号位
E:指数,十进制指数加上127后的值得二进制数据
M:底数
3、符号位
指底数的符号,可正可负。
4、指数
根据浮点数的存储标准(IEEE制定),float类型指数的起始数为127(二进制0111 1111),double类型指数的起始数为1023(二进制011
1111 1111),在此基础上加指数,得到的就是内存中指数的表示形式。
5、底数
实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit
科学计数法。
最后我们在将符号为负的情况也考虑进去,可知,float的真正取值范围是:
[-1.1… x 2128(-3.4028235E38),-1.1… x 2-127] ∪ [1.1… x 2-127,1.1… x 2128(3.4028235E38)]
结论
由此得出,四个字节的浮点类型比八个字节的整型取值范围要大,原因就是数据的储存方式不同造成的