IEEE754标准
1.表示形式
\((-1)^s\) * \(2^e\) *(\(b_0.b_1b_2b_3b_4...b_p\))
其中e为指数,用移码表示.(\(b_0.b_1b_2b_3b_4...b_p\))为尾数,用原码表示.
规格化编码是\(b_0\)要省略不写
2.单精度浮点型(32位)
1位数符,8位阶码,23位尾数.
3.关于IEEE-754单精度浮点数的结论
- 阶码的移码表示,偏移量不是\(2^n而是(2^n-1)\).8位的偏移量为127.
- E + 127 = e,即当浮点数的指数为E时,要进行按IEEE-754标准表示时,新的指数为e(移码表示)
- 当e=0或255时,表示特殊的数,在IEEE-754标准中.
4.例子
(1)
\((176.0625)_{10} = (10110000.0001)_2\)
对二进制规格化:
10110000.0001 = 1.01100000001*\(2^7\)
将\(b_0\)去掉并扩展成IEEE-754的规定单精度所规定的的23位尾数为:
011 0000 0001 0000 0000 0000
在求阶码,现在的指数为7(真值)
e = 7 + 127 =134
\([e]_补\) = 00000111 + 01111111 = 10000110
也可以直接将134这个10进制数转为对应的二进制数(相当于快速运算吧)
134 = 10000110
结果为:
0 10000110 01100000001000000000000
(2)
1.0101*\(2^{-3}\)
方法一:阶码: e = -1 + 127 = 124 = (01111100)
方法二:阶码: e = \([-3]_补\) + 127 = 11111101 + 01111111
1 1 1 1 1 1 0 1
+0 1 1 1 1 1 1 1
1 0 1 1 1 1 1 0 0 最高位舍去得 e = 01111100
结果为: 0 01111100 01010000000000000000000
5.IEEE-754单精度浮点数标准的阶码与真值的补码的转换
- 符号位取反
- 加一
\([-3]_移\) = 01111100 -----> \([-3]_补\) = 11111101
- 符号位取反
- 减一
\([-3]_补\) = 11111101 ----> \([-3]_移\) = 01111100
6.IEEE-754单精度浮点数的价码转为规格化浮点数的阶码
\([-3]_移\) = 01111100 写成16进制形式 7CH
7CH - 7FH = -3 H这里-3即为原来的指数
-
例子 比如给出IEEE-754下的标准当精度浮点数的表示为
0 10000110 01100000001000000000000 让你求原来的浮点数
首先0表示为正
10000110 (按上面说的方法) 求出为86H,减去7FH得 7,所以原指数为7
也可以按原来的e = 7 + 127逆推回去或者按(5)的方法
01100000001000000000000 要注意之前省略的1,所以位数为1.01100000001
结果为: \(1.01100000001 * 2^7\)