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为例: