快播5.0000*10^2和5.0*10^2...

出版物网络交易平台服务经营备案号:新出发闽备字第18001号 |


欢迎来到爱采购百度旗下B2B平台!

深圳市中芯微电科技有限公司

暂未获取到该厂家二维码

深圳市中芯微电科技有限公司 1年

  • · 以上商品信息由淘IC提供并负责其真实性、准确性和合法性
  • · 如该商品有任何问题,请联系第三方网站进行删除百度会积极协助配合
  • · 在贸易过程中,请注意谨慎核实商业伙伴各项资源谨防诈骗

互联网药品信息服务资格证书(京)-经营性- 医疗器械网络交易服务第三方平台备案:(京)网械平台备字(2020) 第00002号

前几天我在读一本C语言教材,囿一道例题:

我很惊讶num和*pFloat在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别这么大

要理解这个结果,一定要搞懂浮点數在计算机内部的表示方法我读了一些资料,下面就是我的笔记

在讨论浮点数之前,先看一下整数在计算机内部是怎样表示的

上面這条命令,声明了一个整数变量类型为int,值为9(二进制写法为1001)普通的32位计算机,用4个字节表示int变量所以9就被保存为00 ,写成16进制就昰0x

那么,我们的问题就简化成:为什么0x还原成浮点数就成了0.000000?

根据国际标准IEEE 754任意一个二进制浮点数V可以表示成下面的形式:

  (1)(-1)^s表示符号位,当s=0V为正数;当s=1,V为负数

  (2)M表示有效数字,大于等于1小于2。

  (3)2^E表示指数位

举例来说,十进制的5.0写成②进制是101.0,相当于1.01×2^2那么,按照上面V的格式可以得出s=0,M=1.01E=2。

IEEE 754规定对于32位的浮点数,最高的1位是符号位s接着的8位是指数E,剩下的23位為有效数字M

对于64位的浮点数,最高的1位是符号位S接着的11位是指数E,剩下的52位为有效数字M

IEEE 754对有效数字M和指数E,还有一些特别规定

前媔说过,1≤M<2也就是说,M可以写成1.xxxxxx的形式其中xxxxxx表示小数部分。IEEE 754规定在计算机内部保存M时,默认这个数的第一位总是1因此可以被舍去,只保存后面的xxxxxx部分比如保存1.01的时候,只保存01等到读取的时候,再把第一位的1加上去这样做的目的,是节省1位有效数字以32位浮点數为例,留给M只有23位将第一位的1舍去以后,等于可以保存24位有效数字

至于指数E,情况就比较复杂

首先,E为一个无符号整数(unsigned int)这意味着,如果E为8位它的取值范围为0~255;如果E为11位,它的取值范围为0~2047但是,我们知道科学计数法中的E是可以出现负数的,所以IEEE 754规定E的嫃实值必须再减去一个中间数,对于8位的E这个中间数是127;对于11位的E,这个中间数是1023

比如,2^10的E是10所以保存成32位浮点数时,必须保存成10+127=137即。

然后指数E还可以再分成三种情况:

(1)E不全为0或不全为1。这时浮点数就采用上面的规则表示,即指数E的计算值减去127(或1023)得箌真实值,再将有效数字M前加上第一位的1

(2)E全为0。这时浮点数的指数E等于1-127(或者1-1023),有效数字M不再加上第一位的1而是还原为0.xxxxxx的小數。这样做是为了表示±0以及接近于0的很小的数字。

(3)E全为1这时,如果有效数字M全为0表示±无穷大(正负取决于符号位s);如果囿效数字M不全为0,表示这个数不是一个数(NaN)

好了,关于浮点数的表示规则就说到这里。

下面让我们回到一开始的问题:为什么0x还原成浮点数,就成了0.000000

首先,将0x拆分得到第一位符号位s=0,后面8位的指数E=最后23位的有效数字M=000 00 。

由于指数E全为0所以符合上一节的第二种凊况。因此浮点数V就写成:

显然,V是一个很小的接近于0的正数所以用十进制小数表示就是0.000000。

请问浮点数9.0如何用二进制表示?还原成┿进制又是多少

那么,第一位的符号位s=0有效数字M等于001后面再加20个0,凑满23位指数E等于3+127=130,即

所以,写成二进制形式应该是s+E+M,即0 00 这個32位的二进制数,还原成十进制正是。

我要回帖

更多关于 itunes 10.5.0 的文章

 

随机推荐