我理解消化后的浮点数存储
昨天开始学习C语言,记录下学习笔记:
1. 规定单精度浮点数用32bit表示(4Byte):
首位为符号位(0正1负),
8位指数位(表示小数位应该乘以2的多少次方),
23位小数位(十进制原值用二进制表示并规整为科学计数法后带一位整数的二进制小数,由于整数位必须为1所以省略整数部分,只保存小数部分)。
2. 规定双精度浮点数用64bit表示(8Byte):
首位为符号位,
11位指数位,
52位小数位。
3. IEEE规定指数部分需要加上偏移值 ,其中的 为存储指数的比特的长度, =8时偏移值为127,e=11时偏移值为1023。
4. 以下图为例:
0.15625(10)= (2^-3 + 2^-5)(10) = 0.00101(2) = (1.01 * 2^-3)(2),
所以阶码为 (-3 + (2^(8-1) - 1))(10) = (-3 + 127)(10) = 124(10) = 0111 1100(2)
小数部分为 1.01 后补21个0后的小数部分,即形成下图所示的存储格式。
此为单精度浮点数的存储方式,双精度浮点数的存储方式同理,只不过阶码的移码是1023(+1023(10))。
截图来源:http://www.runoob.com/cprogramming/c-variables.html
关于IEEE754的更多详情参见百度百科IEEE754标准:https://baike.baidu.com/item/IEEE%20754/3869922?fr=aladdin