一:转换
如:十进制数12.34,多项式表示: 1*10^1 + 2*10^0 + 3*10^(-1) + 4*10^(-2)
化简为二进制表示:
整数部分:除2取余,直到商为0,倒序取余
表达式 商 余
12/2 6 0
6/2 3 0
3/2 1 1
1/2 0 1
结果为 1100
小数部分: 乘2取整,直到小数部分为0或满足精度后(截取),顺序取值
表达式 积 整数部分
0.34*2 0.68 0
0.68*2 1.36 1
0.36*2 0.72 0
0.72*2 1.44 1
0.44*2 0.88 0
0.88*2 1.76 1
0.76*2 1.52 1
0.52*2 1.04 1
0.04*2 0.08 0
0.08*2 0.16 0
0.16*2 0.32 0
0.32*2 0.64 0
0.64*2 1.28 1
0.28*2 0.56 0
0.56*2 1.12 1
0.12*2 0.24 0
0.24*2 0.48 0
0.48*2 0.96 0
0.96*2 1.92 1
0.92*2 1.84 1
0.84*2 1.68 1 -- 第21位
.....
结果很可能是一个无穷尽数,假设这里只取20位,因第21位为1,故产生进位,结果为 0101 0111 0000 1010 0100
综上,整数部分 + 小数部分
得十进制12.34的二进制可近似地表示为 1100.0101 0111 0000 1010 0100
二:存储
现在已经将十进制数12.34转化成二进制,那么计算机是如何表示的呢?
这与科学计数法十分相似,如
十进制科学计数法可表示为 (-1)*S * M * 10^E
S为符号位,1表示负数,0表示正数
M为尾数,范围 1<=M<10,如(1.2, 9.234等)
E为指数(幂)
如 12.34 可表示为 (-1)*0 * 1.234 * 10^1
类似地,二进制科学计数法可表示为 (-1)*S * M * 2^E,尾数 1<=M<2,如
1) 1100.01010111 可表示为 (-1)*0 * 1.10001010111 * 2^3 (小数点左移3)
2) -0.00110 可表示为 (-1)*1 * 1.10 * 2^(-3) (小数点右移3位)
a. 可见指数E因左移右移,而或正或负,为避免指数为负数,在存储时会加上偏移量
单精度时为 127,双精度时为 1023
比如指数E为 (-3),则存储时E 127+(-3) = 124,在取值时再减去相应的偏移量还原数据
b. 因为尾数1<=M<2总是 1.xxx 的形式,为节省空间,是不保存整数部分的1的,如M=1.01,实际保存时M=01
三 举例
写出十进制数 12.34 的单精度存储形式 (保留20位,第21位是1,产生进位,而不是直接截断)
1) 转化二进制 1100.01010111000010100100
2) 写成科学计数法形式 (-1)*S * M * 2^E,
= (-1)*0 * 1.10001010111000010100100 * 2^3
符号位 S = 0,
尾数M = 1.10001010111000010100100(表示时) = 10001010111000010100100(存储时),不保存相等的整数位1
指数E = 127 + 3 = 130 = 10000010 (为避免指数出现负值,加上单精度偏移量 127)
3) 实际存储格式为 0 10000010 10001010111000010100100
= 0100 0001 0100 0101 0111 0000 1010 0100
= 0x 41 45 70 a4
四 总结
综上,有以下结论
1) 浮点数是不精确的
2) 取值范围依赖于指数部分E,单精度类型为8位,范围为-127~128 (有符号的,可能左移,也可能右移),所以最大取值 2^128=3.4E38
3) 有效位数是指尾数M,单精度类型为23位,所以最大有效位是2^23= 8388608(共7位)
4) 相对于定点数,表示范围更大,但运算也更复杂
- 浏览: 29141 次
最新评论
-
ruanxianqing:
按照你的思路8080提供服务,9090升级完毕但是这个时候需要 ...
基于Nginx实现Java项目无缝升级
相关推荐
例如,浮点数50.0,在通信中传送的是它的IEEE-754格式,即4字节的十六进制424800H.因此,单片机的C程序,在发送或接收外围设各的参数值时,需要解决如何实现浮点数与IEEE格式转换的问题。 2.IEEE浮点数的格式 在...
单精度浮点数,双精度浮点数,浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。
将浮点数转为字符串的具体算法在网上少有涉及,一般都采用浮点法,即通过浮点运算确定需要的每一位上的数字。本文介绍的方法是定点法,即对IEEE 745[1]的浮点数编码规范进行硬解码。这种方法效率不高,但是精度确很...
单片机在通信中,浮点数的处理往往容易出错,本代码解决单片机通信时的浮点数据转换处理,包括浮点数转换成char ,和char转成float类型
C语言浮点数转字符串
本文档简介了TMS320C3x浮点数简介、IEEE754的32位转VC33的32位浮点数算法、IEEE754的64位浮点数转VC33的40位浮点数算法;给相关TI的DSP开发工程师提供开发参考。
学习c过程中,编写的浮点数转成ASCII字符串的函数,包括源代码和测试程序,在gcc-3.4.5-20060117-3和VS2008下均编译通过,并运行结果正确。 如果你在测试的过程中发现输出结果不正确,欢迎跟我联系,以便进一步改进...
a) 并采用门级编程,实现4-bit无符号整数到浮点数转换; b) 并采用RTL级编程,实现4-bit无符号整数到浮点数转换; c) 分别对门级编程实现和RTL级编程实现的组合逻辑电路进行功能仿真; d) 利用“实验板”对两种4-bit...
符合IEEE-754标准的单精度浮点形数据,C51里用4字节存储一个浮点数,如用0x3F000000表示小数0.5;0xBDCCCCCD表示小数-0.1。一般我们还是习惯用十进制来表示容易看。但有的时候我们需要知道一个十进制的小数保存到...
labview下实现16进制转换浮点数。
浮点数整数转换工具,用于浮点数与整数之间相互转换
labview IEE754浮点数转换程序,通过串口采集到的十六进制字符串转换成单精度的浮点数,浮点数转换成十六进制字符串
S7-200SMART 64位浮点数转32位浮点数(源文件+库文件+程序注释),double to float
好用的浮点数与二进制转换工具,通讯开发必备实用小工具,4字节浮点数转换,支持正序倒序转换。浮点数转二进制,二进制转浮点数,转换准确。
浮点数的数据结构 浮点数的数据结构 周末在家,重新学习了⼀下以前不太懂的知识点。浮点数和数据结构。 1 什么是浮点数? 通俗来说带有⼩数点的数都是浮点数。⽐如1.1,121.212,-1.11,-222.111 2 在JAVA中常⽤表⽰...
单片机浮点数设计 单片机浮点数设计 单片机浮点数设计
目前支持二进制浮点数的硬件和软件文档中,几乎都声称其浮点数实现符合IEEE 754标准。那么,什么是IEEE 754标准? 最权威的解释是IEEE754标准本身ANSI/IEEE Std 754-1985《IEEE Standard for Binary Floating-Point...
S7-200SMART_双精度浮点数转换为单精度浮点数库文件及使用说明
十六进制转化为浮点数,功能简单,两个测试按钮。 十六进制转化为浮点数,功能简单,两个测试按钮。可以简单了解一下.....
浮点数与十进制数转换工具,可用浮点数转十进制,也可以用十进制转浮点数