浮点数在内存中的存储结构

浮点数在内存中的存储可以参考《IEEE754标准》https://people.eecs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF

参考博文:IEEE754详解(最详细简单有趣味的介绍)-优快云博客



单精度float占内存4字节,最高位bit31表示符号位,指数位bit23~bit30占用8个bit位,剩余的23个bit表示尾数。

双精度double占用内存8字节,最高位bit63表示符号位,指数位bit52~bit62占用11个bit位,剩余的52个bit表示尾数。

字节长度 符号位S 指数位E 尾数M
单精度 4字节 1 [31] 8 [30-23] 23 [22-0]
双精度 8字节 1 [63] 11 [62-52] 52 [51-0]



任何一个数,都可以使用不同的权重表示,最终的计算结果公式如下:

假如有一个数:AnAn-1An-2...A2A1B1B2...Bn-1Bn,其中A1~An表示整数部分的每一位数,B1~Bn表示小数部分的每一位数。权重为Q,则

S = An*Q^(n-1)+An-1*Q^(n-2)+...+A2*Q^1+A1*Q^0+B1*Q^(-1)+B2*Q^(-2)+...Bn-1*Q^(-(n-1))+Bn*Q^(-n)

例如十进制数:123.456,对应的十进制数是

S = 1*10^2+2*10^1+3*10^0+4*10^(-1)+5*10^(-2)+6*10^(-3)

再比如二进制数:1011.011,对应的十进制数是

S = 1*2^3+0*2^2+1*2^1+1*2^0+0*2^(-1)+1*2^(-2)+1*2^(-3) = 11.365

再比如八进制数:56.76,对应的十进制是

S = 5*8^1+6*8^0+7*8^(-1)+6*8^(-2) = 46.96875

将10进制数转为其他进制,比如将整数为A,小数为B变为b进制(123.456:整数A=123,小数B=0.456),则步骤如下:

整数部分:

1. A除以b得到商B和余数R1

2. B除以b得到商C和余数R2

3. .................................Rn-1

4. 重复2,直到商为0,余数为Rn

则整数部分是:RnRn-1...R2R1

小数部分:

1. 小数B乘以b得到积B',再将B'拆分成整数部分F1和小数C

2. 小数C乘以b得到积C',再将C'拆分成整数部分F2和小数D

3. 小数D乘以b得到积D',再将D'拆分成整数部分F3和小数E

4. 重复上述过程,直到小数为0。(有可能永远不会等于0)

则小数部分是:F1F2F3...Fn-1Fn.........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值