最近在项目中看到一行这样的代码
int i = Float.floatToRawIntBits(9f);
为了搞懂返回值具体是什么意思,特此查询并记录下来
1.IEEE 754浮点标准
附链接IEEE 754标准
这是我看到的讲的比较好的,能搞懂浮点数是怎么回事,怎么确定的。
其中的定义
符号位 s(Sign)决定数是正数(s=0)还是负数(s=1),而对于数值 0 的符号位解释则作为特殊情况处理。
有效数字位(或者称为尾数位) M(Significand)是二进制小数,它的取值范围为 1~2-ε,或者为
0~1-ε。它也被称为尾数位(Mantissa)、系数位(Coefficient),甚至还被称作“小数”。指数位 E(Exponent)是 2 的幂(可能是负数),它的作用是对浮点数加权。
2.代码的意思理解
以上的代码返回了1091567616,不难看出这是个10进制的数字,我将其转换为二进制
#十进制
1091567616
#二进制
0 10000010 00100000000000000000000
我们先把9转换为二进制为1001,换成指数表示形式为1.001*2^3,指数最高为3,然后将3+127得到指数位二进制10000010(至于为什么是127,附链接为什么是127)
如果你看了上面的文章,就会看懂,S位是0,指数位是10000010,尾数位是00100000000000000000000
这是完全符合IEEE754标准的,f可以理解为单精度,所以上面的代码返回的就是该数值的浮点数的十进制数字。