浮点数的二进制表示

现代计算机中,一般都以IEEE 754标准存储浮点数,下面附上一个浮点数转换成二进制的链接。

IEEE-754 Floating Point Converter

 这个标准在内存中的存储形式:(阶码和尾数之间隐含小数点)

数符阶码(含阶符)尾数
signexponentfraction

 

 

float,double在内存中占用位宽如下所示:

类型符号位阶码尾数长度
float182332
double1115264

下面我们通过例子来认识一下float与double在内存区的存储原理:

 例:float f=2.25f

步骤一:符号位占1个bit位。此数为正数,所以符号位为0。

步骤二:指数位占8个bit位。

第一步:先将十进制的2.25转换成二进制0010.01(整数部分除二取余,小数部分乘二取整)
第二步:将10.01用二进制的科学计数法表示为1.001
第三步:将第二步所得数值写成指数形式1.001*(2^1)(因为左移一位,所以是*2^1,如果左移7位,则要写成2^111的形式)
第四步:将指数数值1+127=128,将128转化成二进制形式即1000 0000写到指数部位。这里有一点注意:float指数数值+127,double指数数值+1023

 

 

 

步骤三:尾数占 23个bit位。

只需将步骤二第二步当中所得的数1.001的小数部分001写到指数部位,剩下的用0补齐即可。

综上,单精度浮点数2.25在内存中的表示形式为:

1000 0000 00100000000000000000000

例:double=2.25;

略(前面部分与float=2.25相同)

第四步:将指数数值1+1023=1024,将1024转化成二进制形式即100 0000 0000写到指数位。

步骤三:尾数52个 bit位。

只需将步骤二第二步当中所得的数1.001的小数部分001写到指数部位,剩下的用0补齐即可。

 综上,双精度浮点数2.25在内存中的表示形式为:

0 10000000000 0010000000000000000000000000000000000000000000000000 

这里可能有个疑问:步骤二第二步小数点前面的 1去哪里了?

这是 由于尾数部分是规格化表示的,最高位总是“1”,所以这是直接隐藏掉,同时也节省了1个位出来存储小数,提高精度。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值