IEEE-754

浮点数在C/C++中对应float和double类型,我们有必要知道浮点数在计算机中实际存储的内容。

IEEE754标准中规定float单精度浮点数在机器中表示用 1 位表示数字的符号,用 8 位来表示指数,用23 位来表示尾数,即小数部分。对于double双精度浮点数,用 1 位表示符号,用 11 位表示指数,52 位表示尾数,其中指数域称为阶码。

IEEE754规定:

单精度浮点数字长32位,尾数长度23,指数长度8,指数偏移量127;双精度浮点数字长64位,尾数长度52,指数长度11,指数偏移量1023; 约定小数点左边隐含有一位,通常这位数是1,所以上述单精度尾数长度实际为24(默认省略小数点左边的1则为23),双精度尾数长度实际为53(默认省略小数点左边的1则问53)。

下面讲述使用IEEE754标准表示浮点数:

176.0625表示为单精度浮点数:

解:

1、先将176.0625转换为二进制数

小数点前:
176 / 2 = 88  余数为 0
88 / 2  = 44  余数为 0                             
44 / 2  = 22  余数为 0                       
22 / 2  = 11  余数为 0                              
11 / 2  = 5   余数为 1        
5 / 2   = 2   余数为 1                             
2 / 2   = 1   余数为 0  
1 / 2   = 0   余数为 1    商为0,结束。 

小数点前整数转换为二进制:10110000

小数点后:小数部分乘以2,取整数部分,直至乘积小数部分为 0

0.0625 * 2 = 0.125   整数为0                 
0.125 * 2  = 0.25    整数为0             
0.25 * 2   = 0.50    整数为0             
0.5 * 2    = 1.0     整数为1,小数部分为0,结束

小数点后的小数位转换为二进制:0001

故176.0625转换为二进制为:10110000.0001

2、IEEE754约定小数点左边隐含有一位,通常这位数是1,所以10110000.0001 = 1.01100000001 *  2^7(小数点向左偏移7位)。

IEEE754约定单精度指数偏移量为127,所以176.0625使用IEEE754标准表示时,指数偏移量为 7+127=134,即:10000110

IEEE754约定单精度尾数长度为23,所以176.0625使用IEEE754标准表示时,尾数为:01100000001000000000000

176.0625 > 0,即为整数,所以符号位为 0

3、由上得出:176.0625 使用IEEE754规格化后的表示为:0  10000110 01100000001000000000000

Last Updated: 6/18/2019, 12:46:52 PM