IEEE754浮点数算数标准

IEEE754规定:

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

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

  1. 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

出处:https://blog.csdn.net/dingzhenli1993/article/details/54017921

=====================================================================

浮点数是我们在程序里常用的数据类型,它在内存中到底是怎么样的形式存在,是我了解之前是觉得好神奇,以此记录,作为学习笔记。

现代计算机中,一般都以IEEE 754标准存储浮点数,这个标准的在内存中存储的形式为:

对于不同长度的浮点数,阶码与小数位分配的数量不一样,如下:

对于32位的单精度浮点数,数符分配是1位,阶码分配了8位,尾数分配了是23位。

根据这个标准,我们来尝试把一个十进制的浮点数转换为IEEE754标准表示。

例如:178.125

  1. 先把浮点数分别把整数部分和小数部分转换成2进制
    1. 整数部分用除2取余的方法,求得:10110010
    2. 小数部分用乘2取整的方法,求得:001
    3. 合起来即是:10110010.001
    4. 转换成二进制的浮点数,即把小数点移动到整数位只有1,即为:1.0110010001 * 2^111,111是二进制,由于左移了7位,所以是111
  2. 把浮点数转换二进制后,这里基本已经可以得出对应3部分的值了
    1. 数符:由于浮点数是整数,故为0.(负数为1)
    2. 阶码 : 阶码是需要作移码运算,在转换出来的二进制数里,阶数是111(十进制为7),对于单精度的浮点数,偏移值为01111111(127)[偏移量的计算是:2^(e-1)-1, e为阶码的位数,即为8,因此偏移值是127],即:111+01111111 = 10000110
    3. 尾数:小数点后面的数,即0110010001
    4. 最终根据位置填到对位的位置上:

出处:https://blog.csdn.net/fwb330198372/article/details/70238982

猜你喜欢

转载自blog.csdn.net/u014183377/article/details/98855405