我们都知道整数在内存中是通过变为二进制数进行存储,但在float浮点类型的小数却有着独特的存储方式
参考: https://blog.youkuaiyun.com/weiguishan/article/details/43889101
可以得到如下存储方式模型:

指数位代表8位无符号二进制数,表示0~255的范围,但是指数应可正可负,所以IEEE规定,此处算出的次方须减去127才是真正的指数。所以float的指数可从 -126到128
按照以上的模型,浮点数据就以
| 符号位 | 指数位 | 底数位 |
|---|---|---|
| S | EEEEEEEE | MMMMMMMMMMMMMMMMMMMMMMM |
方式存储在四个字节中,其中:
S: 符号位,1为负,0为正
E: 指数加上127后的值的二进制数
M: 24-bit的底数(只存储23-bit)
下面举个例子来模拟一次存储过程:
对于一个小数6.25
1).将其转为二进制:111.01(转换过程不再赘述)
2).小数点向左移动直到小数点前只剩一个1,由于移动了3位,指数E就为3+127=130,用二进制表示:10000010
3).在经过移动后,原本的二进制变为:1.1101,此时底数M为1101
4).由于该小数位正数,故S为1
综上所述,6.25浮点类型二进制表示为:1 10000010 11010000000000000000000
和上方的表格一致
将浮点数的二进制表示为小数的过程与存储过程相反,课参考上方的连接
从以上过程我们可以知道:
- float实际指数的取值范围为-126~+127
- float的取值范围为(尾数位最小值)-2* 2^127 到(尾数位最大值)+2*2^127
- -2^127 到+2^127 表示为十进制为-3.4e38~3.4e38
这也解释了为什么float表示的范围比long大
本文详细解析了float类型浮点数在计算机内存中的存储原理,包括其符号位、指数位及底数位的构成,以及如何通过二进制表示实现数值的存储与解析,揭示了float取值范围为何能超过long类型。
241

被折叠的 条评论
为什么被折叠?



