float浮点数的内存格式


1、将13.75转成二进制数
      整数部分:
     13/2 = 6...........1(余数)  

     6/2  =3............0                                               从下往上读为1101,即为13的二进制

     3/2  =1............1

    1/2  =0............1(商为0止)

    取每次结果的商除以2

   小数部分:

   0.75 * 2 = 1.5...........1(取整数部分)      从上往下为11即为0.75的小数部分的二进制

   0.5*2   =1.0............1(小数为0止)

   取每次结果的小数部分乘2

  13.75的二进制为1101.11

2、将二进制左移到仅有1位有效位为1.101 11,左移了3位(原则:小数点左边仅有1位有效位,需要左移或右移)

3、指数部分为127+3 = 0x82 即浮点格式中指数的二进制为1000 0010(如果是右移则减3)

4、13.75是正数,符号位为0

5、浮点格式的小数部分为101 11

将上述结果填入浮点数的各个域中,如下:

 1000 0010 10111 00000000 000000000(右边小数位补0,凑32位)

转成十六进制:

0100 0001 0101 1100 0000 0000 0000 0000(即0x415C0000)

怎们验证呢?打开C++builderIDE环境,输入代码:
float  i = 13.75;
在此行并下断点,然后查看CPU反汇编代码,如下图:


如果是一个纯小数呢?原则和上面一样。如0.25 ,整数部分为0,小数部分转成二进制为:
0.25 *2  = 0.5......0
0.5*2    = 1.0......1
从上到下读值为01,即0.35的二进制表示为0.01,需要右移2位,即乘以2的-2次方,浮点数的指数部分为127-2=125=0x7D
填充到浮点格式域中:0 01111101 00000000000000000000000 即0x3e800000为内存中的值





 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值