\((-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\)要省略不写
1位数符,8位阶码,23位尾数.
- 阶码的移码表示,偏移量不是\(2^n而是(2^n-1)\).8位的偏移量为127.
- E + 127 = e,即当浮点数的指数为E时,要进行按IEEE-754标准表示时,新的指数为e(移码表示)
- 当e=0或255时,表示特殊的数,在IEEE-754标准中.
(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
- 符号位取反
- 加一
\([-3]_移\) = 01111100 -----> \([-3]_补\) = 11111101
- 符号位取反
- 减一
\([-3]_补\) = 11111101 ----> \([-3]_移\) = 01111100
\([-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\)
原文:https://www.cnblogs.com/Tisou1/p/13771091.html