基础概念

浮点数的逻辑示图:

  • Exponent指数 (IEEE754标准规定该固定值得表达式)E=2^(e-1)-1或 E=2^e-2,E偏移的值在(0,2e-2]之间,即0<E<=2e-2)S(sign)表示符号位。对应值S满足:假如浮点数为N,N>=0时,S=0; N<0时,S=1
  • E(exponent)表示指数位,位于SM之间的若干位。对应值e值也可正可负
  • M(mantissa)表示尾数位,也叫有效数字位(significand)、系数位(coefficient, 甚至被称作"小数"

*公式中: e-1我们称之为指数偏移差;e为存储指数的bit(比特)的长度;Exp为指数偏移值(exponant bias)。


存储方式(IEEE754)

 

单精度浮点数的存储方式

在不同的环境(计算机32位或64位)或编程语言中表示的浮点类型也有各自的差异,比如:单精度浮点数(C#语言中用float表示单精度浮点类型)的表示:

 根据上述公式可得到单精度浮点类型的固定偏移值

               E=2^(e-1)-1 => E=2^(8-1)-1=> E=127 (单精度浮点类型的固定偏移值 127);


双精度浮点数的存储方式

双精度浮点数(C#语言中用double表示双精度浮点类型)的表示:

 根据上述公式可得到单精度浮点类型的固定偏移值

               E=2^(e-1)-1 => E=2^(11-1)-1=> E=1023 (单精度浮点类型的固定偏移值 1023);


 举例:求单精度浮点类型的 float f=10.3f (C#的语言)二进制

 

Step 1先求实数的绝对值的二进制格式(Binary)

         10的二进制:1010   。(10除以2依次求余,然后从下往上取余数)

Step 2:求小数部分的二进制(Binary)

      0.3的二进制:0100110011...0011... (小数部分二进制算法:小数部分乘以2,如果大于1,取1,否则取0)

Step 3求Sign符号位的二进制

      因为10.3>=0,所以Sign(符号位)位:0 。

Step 4求Exponant指数位的二进制

    其中单精度浮点数10.3中整数部分的10的二进制位为1010,即1.01*10^3。那么10.3的偏移码值为:3(1.01*10^3的指数值)加上127(单精度浮点数的固定偏移值),即130(编码值为: Exp=3+127=130 )。

  偏移码值130的Binary(二进制)为:1000 0010,即Exponant => 1000 0010.

Step 5求Mantissa(尾数)的二进制

   在求10.3整数部分的二进制值时,我们将1010变为了1.01*10^3,接合尾数0100 1100 1100 ....,即1.0100 1001 1001..*10^3。

   即Mantissa(尾数) 0100 1001 1001 1001 1001 101 。

 

float f=10.3f 存储方式:

 

 

至于双精度在这里就不举例子了(将Step4中单精度固定偏移值127换成双精度固定偏移值1023,同时注意补位)。

 

 

 

 

相关文章: