浮点类型的存储方式

1、浮点数是如何存储的

   

首先应先了解浮点数的存储方式。以float为例。float一共占4个字节,共32位。分为3部分:符号位、指数位和尾数位。分别占1位、8位和23位,存储结构如图1所示。

 另外,double类型,8字节,共64位;符号位1位,指数位11位,尾数位52位;


2、如何把十进制浮点数转成二进制浮点数

  例如:把20.5和20.3转成二进制浮点数

      20.5 ->10100.1   

      首先把浮点数分成两部分,整数部分和小数部分,分别为20和0.5,20表示成二进制为10100

      小数部分转成二进制的方法如下:

      0.5X2 = 1.0(1)  (小数部分的值乘以2所得的值再减去其整数部分的值)

      0X2 = 0(0) ...

      20.3 ->10100.0100110011001....

      0.3X2 = 0.6(0)

      0.6X2 = 1.2(1)

      0.2X2 = 0.4(0)

      0.4X2 = 0.8(0)

      0.8X2 = 1.6(1)

      0.6X2 = 1.2(1)

      0.2X2 = 0.4(0)

      0.4X2 = 0.8(0)

      0.8X2 = 1.6(1)

      ..................

3、将浮点数存储在一组字节中

  上面我们把浮点数转换成二进制浮点数,20.5表示成10100.1, 20.3表示成10100.010011001...

我们把二进制浮点数用科学计数法的形式表示,例如:

      20.5 表示成 1.01001E(100)  ->100 = 4

      20.3 表示成 1.0100010011001...E(100)

      根据上面的介绍,我们知道float和double浮点数在内存中是由三部分组成,那是如何定义这三部分的数     据的呢,下面以20.5和20.3介绍这三部分的数据是如何定义存储的。

      例如:20.3 符号位0表示正数,1表示负数 ,因此符号位为0

      指数位,根据上面科学计数法得知20.3的指数为100,但是指数并不是100,而在指数100加上对应值,      float是127(01111111),double是1023(01111111111),因此得到的指数位是                       10000011(float),10000000011(double)

      尾数位,对应的就是科学计数的尾数,后面没有的补0,float(100000...)

4、如何将浮点数以二进制输出

   #include <stdio.h>
   #include <stdlib.h>
   void main()
   {    
           float f = 20.3;
	   unsigned int * n = (unsigned int *)&f;
	   for (int i=31;i>=0;--i)
	   {
               printf("%d", (*n >> i & 1));
	   }
     }



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值