浅析浮点数与定点数
2015-09-01 17:22
357 查看
1.浮点数存储形式:
浮点数的小数点位置是变化的,用阶码和尾数开表示,不用惧怕它的表示形式,它也是一串亲切0、1序列。IEEE754标准从逻辑上用三元组{S,E,M}表示一个浮点数N,如下图所示:(以四字节单精度的浮点型数据为例)
![](https://img-blog.csdn.net/20150901172614631?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其中:
S表示该浮点数N的符号位,0代表正,1代表负;
E为阶码,表示N的指数位,用一个字节表示(8位)
M 为尾数,表示小数部分,该部分决定了浮点型数据的有效数字或精度
下面来看一下如何将一个实数浮点型按该格式存储为二进制:
以3.25为例:
首先可以得到符号位S=0;
然后将3.25转化为二进制表示:11.01,进而变化为:1.101*2^1;
那么,阶码即为1+bias=1+127=128;(单精度浮点型数据的偏移量bias为127)
所以E=10000000
尾数为省去默认的小数点左边的1后剩下的数,即为:101,这也就是为什么23位的尾数可以表示24位精度的缘故。所以M=10100000000000000000000;
所以3.25的二进制存储为:01000000010100000000000000000000
同样,给你一个存储形式按照上边的逆过程你也可以得到他要表示的浮点型数据,这里就不多说了。好吧,还是举个例子吧:
比如:二进制形式为:1 01111010 11000000000000000000000
首先符号位为1,表示该数据为负
E=01111010,01111010转换为十进制为:122, 122-127=-5;
M=11000000000000000000000
所以该数为:1.11000000000000000000000*2^(-5)=0.0000111,后边的0可以省略了
转化为十进制:0.0546875
Ok,打完收工!
2.定点数:
定点数是指小数点的位置是固定不变的,通常分为定点小数和定点整数,用之前先规定好小数点的位置,可以在符号位和数字有效位之间,也可以在数字有效位之后,运算简单,但是表示范围小,要考虑溢出,一般在DSP中有用。
浮点数的小数点位置是变化的,用阶码和尾数开表示,不用惧怕它的表示形式,它也是一串亲切0、1序列。IEEE754标准从逻辑上用三元组{S,E,M}表示一个浮点数N,如下图所示:(以四字节单精度的浮点型数据为例)
其中:
S表示该浮点数N的符号位,0代表正,1代表负;
E为阶码,表示N的指数位,用一个字节表示(8位)
M 为尾数,表示小数部分,该部分决定了浮点型数据的有效数字或精度
下面来看一下如何将一个实数浮点型按该格式存储为二进制:
以3.25为例:
首先可以得到符号位S=0;
然后将3.25转化为二进制表示:11.01,进而变化为:1.101*2^1;
那么,阶码即为1+bias=1+127=128;(单精度浮点型数据的偏移量bias为127)
所以E=10000000
尾数为省去默认的小数点左边的1后剩下的数,即为:101,这也就是为什么23位的尾数可以表示24位精度的缘故。所以M=10100000000000000000000;
所以3.25的二进制存储为:01000000010100000000000000000000
同样,给你一个存储形式按照上边的逆过程你也可以得到他要表示的浮点型数据,这里就不多说了。好吧,还是举个例子吧:
比如:二进制形式为:1 01111010 11000000000000000000000
首先符号位为1,表示该数据为负
E=01111010,01111010转换为十进制为:122, 122-127=-5;
M=11000000000000000000000
所以该数为:1.11000000000000000000000*2^(-5)=0.0000111,后边的0可以省略了
转化为十进制:0.0546875
Ok,打完收工!
2.定点数:
定点数是指小数点的位置是固定不变的,通常分为定点小数和定点整数,用之前先规定好小数点的位置,可以在符号位和数字有效位之间,也可以在数字有效位之后,运算简单,但是表示范围小,要考虑溢出,一般在DSP中有用。
相关文章推荐
- eclipse的egit插件问题
- JS操作Button、Select和Radio
- 010Editor的ELFTemplate 16进制改造
- Android Spinner 的具体用法
- IOS学习笔记 ---- 15/09/01
- Floyd算法
- 感知开源的力量-APICloud Studio开源技术分享会
- 在你步入职业软件开发生涯那天就该知道的5件事
- Docker实践
- 脑子发热的时候别说话
- Linux系统下设置Oracle开机自动启动
- WebSphere是什么?
- 快速排序的几个实现及其在效率上的考虑
- IOS8如何获取当前UIViewController
- 30.ios 8 访问通讯录兼容问题,ABPeoplePickerNavigationController
- 31.ios 防止按钮快速点击造成多次响应的避免方法。 取消正在执行中的方法
- HTTPS推荐文章
- C++面向对象高级开发课程(第一周)
- nested exception is org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 56; cvc-complex-type.2.4.c通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明
- 同一页面多次调用百度编辑器