long 8个字节 float 4个字节
为什么float的范围比long大?
其实,在内存中,float和long的存储方式不同
long类型的数据占8字节,是直接按位存储,即取值范围时 -2^63 到 2^63-1
而float的存储则不同,float类型数字在计算机中用4个字节(32位)存储。
遵循IEEE-754格式标准:
一个浮点数由3部分组成:符号位s(1位)和、指数e(8位)、底数m(23位)
格式:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S:符号位
E:指数,十进制指数加上127后的值得二进制数据
M:底数
例如:17.625 在计算机中表示 10001.101
在将10001.101右移,直到小数点前只剩1位:1.0001101 * 2^4 因为右移动了四位00000000 000000000 00000000 00000000
0 ------符号位
1000001 1 ------指数位4+127=131 指数加1270001101 00000000 000000000 ------ 底数:因为小数点前必为1,所以IEEE
规定只记录小数点后的就好。所以,此
处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
符号:整数,所以是0整体为:
01000001 10001101 00000000 000000000
不难看出,float的指数位从 2^-127 到 2^127-1 这个范围远大于long的数据范围,因此,java中自动类型提升的顺序为:
byte、short、char --> int --> long --> float --> double。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)