您的位置:首页 > 其它

浮点数二进制表示法

2017-01-11 10:37 155 查看
我们期望浮点数也可以像定点数(整数)一样在计算机中以二进制方式存储,但是计算机不能识别小数点,于是一种新的存储方式产生了,即IEEE754浮点表示。

下面以单精度浮点数(float)为例描述下浮点数二进制表示方法。

float占4个字节(32bit),每一bit的作用域如下:



sign占1bit,表示正负号(0为正,1为负)。

exponent占8bit,表示指数。(127表示指数为0,如果指数为正,则exponent表示为127+E,如果指数为负,则exponent表示为127-E(指数位))

fraction占23bit,表示小数有效位。(这里会减去整数位1(取值时加上1),只填充小数位部分,没有填充满的位补0)

综上,一个单精度浮点数所代表的数值为:



补充:

当exponent全为0时,浮点数的指数E等于1-127,有效数字fraction不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。

当exponent全为1时,如果小数位fraction全为0,表示±无穷大(正负取决于符号位sign);如果小数位fraction不全为0,表示这个数不是一个数(NaN)。

举例(以-12.5为例):

1. 先将-12.5转化为带小数点的二进制:-1100.1

2. 将小数点移到第一个1的后面-1.1001*2^3

3. 转化为IEEE754表示法:

   符号位:1

   指数位:127(偏移量/表示0)+3 = 130,即二进制10000010

   小数位:1001(去除了整数部分),余下的位补0,即10010000000000000000000

4. 拼凑起来:1 10000010 10010000000000000000000

float的表示范围:

1.99999...9 * 2^(255-127) 约为 2*2^128 = 3.4*10^38

加上正负号,即为单精度浮点数范围:-3.4*10^38 ……3.4*10^38

由此可见:单精度浮点数表示的数值最大为2*2^128,远大于整数(int)的2*2^32;但是单精度浮点数的有效小数位只有23位(<32),精度有限。

双精度浮点数(double)表示如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: