float在计算机的存储方式


1、float类型数字在计算机中用4个字节(32位)存储。float精度为6~7位。1.66*10^10的数字结果并不是166 0000 0000 指数越大,误差越大。

遵循IEEE-754格式标准:
一个浮点数由3部分组成:符号位s(1位)和、指数e(8位)、底数m(23位)

2、格式
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

S:符号位
E:指数,十进制指数加上127后的值得二进制数据
M:底数

3、符号位

指底数的符号,可正可负。

4、指数

根据浮点数的存储标准(IEEE制定),float类型指数的起始数为127(二进制0111 1111),double类型指数的起始数为1023(二进制011

1111 1111),在此基础上加指数,得到的就是内存中指数的表示形式。

5、底数

实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit
科学计数法。

6、十进制数的二进制转换
算法很简单。举个例子,11表示成二进制数:
                     11/2=5   余   1
                       5/2=2   余   1
                       2/2=1   余   0
                       1/2=0   余   1
                          0结束         11二进制表示为(从下往上):1011
       这里提一点:只要遇到除以后的结果为0了就结束了,大家想一想,所有的整数除以2是不是一定能够最终得到0。换句话说,所有的整数转变为二进制数的算法会不会无限循环下去呢?绝对不会,整数永远可以用二进制精确表示 ,但小数就不一定了。

7、十进制小数的二进制数转换
           算法是乘以2直到没有了小数为止。举个例子,0.9表示成二进制数
                     0.9*2=1.8   取整数部分  1
                     0.8(1.8的小数部分)*2=1.6    取整数部分  1
                     0.6*2=1.2   取整数部分  1
                     0.2*2=0.4   取整数部分  0
                     0.4*2=0.8   取整数部分  0
                     0.8*2=1.6   取整数部分  1
                     0.6*2=1.2   取整数部分  0
                              .........      0.9二进制表示为(从上往下): 1100100100100......
           注意:上面的计算过程循环了,也就是说*2永远不可能消灭小数部分,这样算法将无限下去。很显然,小数的二进制表示有时是不可能精确的 。其实道理很简单,十进制系统中能不能准确表示出1/3呢?同样二进制系统也无法准确表示1/10。这也就解释了为什么浮点型减法出现了"减不尽"的精度丢失问题。

8、float在内存中的存储

举例:17.625在内存中的存储

a.将整数17转换为二进制:10001

b.将小数0.625转换为二进制101

        0.625*2=1.25         取整数部分1

        0.25*2=0.5             取整数部分0

        0.5*2=1.0               取整数部分1

c.将10001.101右移,直到小数点前只剩1位:1.0001101 * 2^4 因为右移动了四位

d.底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
e.指数:实际为4,必须加上127,所以为131。也就是10000011
f. 符号:整数,所以是0

综上所述,17.625在内存中的存储格式是:
01000001 10001101 00000000 00000000

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值