[note]浮点数二进制科学计数法

计算机里用二进制科学计数法表示小数,so


float: 32位

double : 64位


二进制表示法:     符号位数   阶码位数     尾数位数

float                  :      1          8             23

double              :      1         11           52



-----十进制数字转为浮点数二进制科学技术法过程--------------

1. 数字(10)= 整数部分+小数部分

          a.  整数部分---> 16进制---->二进制 (高位的0去掉)

          b: 小数部分转为二进制数字,与十进制的对应关系如下

                             十进制数           二进制数

                            2的-1次方           0.1

                            2的-2次方           0.01

                            2的-3次方           0.001

                   依此类推,即,0.5(10)对应0.1(2), 2的-n次方中的n对应小数点后,二进制的1所在位数

                   据此,把十进制数字拆分为 0.5*0+0.25*0+....  的形式,并根据二进制数和十进制数的对应关系转为二进制数

           c. 数字(10)的二进制数即为    整数部分二进制数  .   小数部分二进制数

           d. 二进制数小数点左移至最高位1的后方,去掉最高位1,剩余部分即为位数部分,不足23位的,低位补0

2. 小数点左移量+2的阶码位数减去1的次方-1 --->16进制---->2进制,即为阶码部分 

3. 如果是正数,则在阶码二进制数字前补一个0; 负数在阶码数字前补0至阶码最高位,符号位填1

4. 组合符号位+阶码部分+尾数部分 , 即为该数字的浮点数二进制科学计数法表示方式。


 ---------------------举例------------------------------

例1. 38414.4(10)转为double型

      1.       符号位为0,价码11位, 尾数52位

                       38414.4=38414.4+0.4 ;

                       38414(10)= 960E (16)= 1001 0110 0000 1110 (2); 0.4(10) =0.5×0+0.25×1+0.125x1+0.0625x0+0.03125x0...= 0.0110 ... // 此处无法除尽,要算满36位,                                                                                                                                                                                                                           以补足加上整数部分后,整个尾数部分要有52位

                       38414.4(10)= 1001 0110 0000 1110 . 0110 ....(2)

                       小数点左移15位即为 1. 001 0110 0000 1110 0110...   x 2的15次方,去掉最高为的1后,尾数 001 0110 0000 0110 ...

      2.  小数点左移量为15; double的阶码位数为11位,即偏移量修正值为 2^(11-1)-1=1023;

           15+1023=1038(10)---->  40E(16)---->0100 0000 1110 (2)

       3. 正数 ,不需要扩展

       4. 阶码+尾数,最终结果   即为double 型  0100  0000 1110  001 0110 0000 0110.... (尾数部分的小数要算满到补足尾数的52位)

 


例2. -12.5(10)转为 float 型

  1. 符号位 位1, 阶码8位, 尾数 23位

            12.5=12+0.5= 1100.1 (2)

             小数点左移3位, 即为  1.1001. 去掉最高位1, 尾数部分为 1001

   2.   小数点左移量为3; float阶码位数为8,即偏移量修正值为2^(8-1)-1=127;

              3+127=130(10) --->82(16) ---> 1000 0010(2)

  3. 负数,符号位为1

  4. 符号位+阶码+尾数,最终结果为 1 1000 0010 1001 0000 0000 0000 000





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值