Java基础类型float
Java基础类型的中float类型4字节,long是8字节,为什么4个字节的float数字长度比8字节的long的长度?
浮点数采用的是IEEE754标准来存储数字。
计算机本质上用二进制存储数值,有些小数可以用2进制准确表达,比如0.5是
$$
0.5 = 2^{-1}
$$
的表示。
整数的存储机制
这个问题首先要讲整数是如何存储的?
计算机所有数据是基于二进制保存的,二进制转十进制很简单,每位数字乘以指数求和即是十进制数值,即:
$$
y=\Sigma a*b^{n-1}
$$
其中:
- a代表当前位上面的数值。
- b代表带转换的进制
- n代表当前为第几位
具体实例比如二进制数1001转换为10进制数9的过程。
$$
1001=12^{4-1}+02^{3-1}+02^{2-1}+12^{1-1}=9
$$
上述的过程对于所有进制数向十进制转换。
浮点数存储方式
java采用IEEE754标准存储浮点数,其中单精度浮点数float使用4个字节,双精度浮点数double使用8字节存储。
float的4个字节共32位是这么分配的:
- 第31位,符号位,0表示负数,1表示正数。
- 第30-23位,这8位表示阶码,即指数部分。
- 第22-0位 尾数,表示小数的实际二进制表示。
具体案例
99.5f为例: