问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

二进制的浮点表示法是怎么表

发布网友 发布时间:2022-04-22 14:02

我来回答

2个回答

热心网友 时间:2023-08-30 16:37

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

int num=9;

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

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

下面一步一步的揭晓答案。

先来看一个公式,计算浮点数的公式:

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

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

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

(3)2^E表示指数位。

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

十进制的-5.0,写成二进制是-101.0,相当于-1.01×2^2。那么,s=1,M=1.01,E=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,即10001001。

然后,指数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)。

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

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

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

V=(-1)^0×0.00000000000000000001001×2^(-126)=1.001×2^(-146)

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

热心网友 时间:2023-08-30 16:37

这不是100,而是二进制的4,因为小数点向左移动了4位
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
陌陌发语音出现转码失败怎么办 女孩2010年5月10号阴历3月27早晨9点55分出生的五行缺什么 钟姓男孩名字2023年5月10日出生的 凤眼果有什么营养?凤眼果的这些营养你都知道吗? 专升本成绩多少合格 山东专升本成绩多少合格 山东2022年专升本成绩什么时候出 2024专升本成绩公布时间及入口 2023年山东专升本各专业录取分数线 什么时候出专升本成绩 山东专升本综合素质测评成绩怎么算 浮点数在内存中的表示方法 孕妇梦见自己牙齿的污垢掉的满嘴都是 浮点表示法用阶码和尾数表示数 梦见自己刷了牙却还有许多牙垢的预兆 计算机中的浮点数是什么? c语言里面的浮点数的表示方法有几种?都是什么啊 浮点型数据可以用什么形式表示 浮点数在计算机中是如何表示的? 浮点数表示方法是什么? 浮点数表示格式? 浮点数格式是什么? 浮点型数据的表示方法 合金弹头是哪里出的游戏,几几年的? 好玩的策略战争手游 为什么电影能在屏幕上呈现? 合金弹头中的时代? 404 Not Found 求助:谁还记的有个泡泡糖叫黑星泡泡糖 战争部系统的弹头有几种,目前已有的是什么弹头 谁有Q版坦克大战 GBA 版本的游戏网站发给我个 ?? 母亲在妊娠之初易引发妊娠期牙龈炎,病因有哪些? 计算机中定点和浮点表示,简单点 举例说明,谢谢 什么是浮点数啊? 谁能告诉我,浮点数的阶码 和尾码 具体是什么原理,有些迷惑~ 谢谢了~ 梦见自己的左边上门牙掉了的预兆 单精度浮点数的格式 狗狗有挺多牙垢,要怎么清理啊? 对于一个数,用浮点数格式表示,那尾数怎么计算 怎样用简单的方法去除牙垢? 贷款利息天数的计算,怎么算天数? 银行计利息是每天的几点? 什么叫计算借款利息时天数算头不算尾? 银行存款一天中在什么时间结算利息.例如今天下午4点 怎样计算银行利息 三星手机怎样清理系统中的文件? 老鼠粘粘到塑料上怎么去除 老鼠粘粘在被子上怎样洗掉 老鼠粘粘到衣服怎么办 我买的老鼠粘怎么粘不住老鼠啊? 老鼠粘有毒吗