浮点型数据在计算机底层的存储方式

浮点型在计算机存储包括三个部分:符号位(1位)+幂指位(8位或者11位)+数值位(23位或者52位)

float   32 = 1 + 8 + 23
double    64 = 1 + 11 + 52

将浮点型转化成二进制分为三步。

以35.25为例

1>将数值转化成二进制表示

         整数部分:35  => 32 + 2 + 1 => 100011

         小数部分:0.25 => 0.01

                           0.25*2=0.50 ——>取结果的整数位,下一次的取结果的小数位乘2———>整数位取出,小数位进入下一次

                           0.50*2=1.00 ——>取结果的整数位,下一次取结果的小数位乘2

                           0.00*2=0.00    ——>向后循环结果相同不必在做了。所以就是0.01

 

         得到35.25的二进制10011.01

2>转化成科学计数法

10011.01=1.0001101*2(5)   这就是把小数点像左移动了5位所以就相当于1.0001101乘以2的5次方,类似于10进制科学技术法,左移几位乘以10的几次方。

3>对号入座

符号位1   + 幂指位8  +  数值位23

0                  127+5(因为幂指数可能正也可能负所以计算机有一个中位数127,127+这个数的二进制就是幂指位的8位数,)                                                          

                     132=10000100                    00011010000000000000000(因为第二部得出的科学技术法小数点左边一定是1所以省略,直接从小数点右边第一位开始写后面如果不够后面用0补齐23位(float型)或者52位(double型))

 

这样就得到了浮点数35.25在计算机底层的存储:01000010000011010000000000000000

 

总结:浮点数转化为二进制分为三部的:

1、将整数,小数分别转化为二进制表示。

 这一部分整数转化为二进制之后左端不需要补0或1.小数转化为二进制的方法是把小数2得到的数整数作为二进制的第一位(从左到右),小数继续乘2然后得到的结果的整数作为二进制的第二位,小数下去继续乘。这样就可以得到******.****第一步完成

2、转化成科学技术法:

将小数点向左移动知道移动到最后一个1前面停止。移动了几位就是乘2的几次方。这样就完成了第二部

3、对号入座

符号位  +        幂指位         +       数值位

0或1      127+n的二进制          科学计数法.之后的所有数不够23位或者52后面补0/多余23或者52位就只截取23或52位               

 

例题:

一:

25.625的二进制存储

25=16+8+1——>11001

0.625 * 2=1.25

0.25 * 2 = 0.5

0.5 * 2 = 1.0

0.0 * 2 = 0.0  ————>101

======>  11001.101===转化成科学技术法====> 1.1001101*2(4)

符号位 0

幂指位127+4=131 = 128+2+1————> 10000011

数值位:10011010000000000000000

所以25.625的二进制位:01000001110011010000000000000000

 

二:8.2

8=8——>1000

0.2*2=0.4

0.4*2=0.8

0.8*2=1.6

0.6*2=1.2

0.2*2=0.4

。————>001100110011[0011循环]

======>1000.001100110011[0011循环]===转变成科学计数法===>1.000001100110011[0011循环]*2(3)

符号位 0

幂指位 127+3=128+2——>10000010

数值位:00000110011001100110011

二进制:0  10000010  00000110011001100110011

由此可见因为0011是无限循环的,二进制只截取了前面的一些所以在存储时精度就发生了变化。所以计算机2.0-1.1并不等于0.9.因为1.1在存储时就发生了无限循环,直接去了全半段。

 

 

     

                                                                       

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值