2014.12.26浮点数的存储方式

浮点数的存储方式

浮点数的存储方式都是分成三段

    • 符号位 一个位  1指负 0指正
    • 指数位
    • 尾数位

科学计数法: 2.55E7   2.55是尾数 E后面的7是指数

float 单精度浮点数占4个字节 共32位  

    • 符号位: 1
    • 指数位: 8
    • 尾数位: 23

 

double 双精度浮点数占8个字节 共64位

    • 符号位:1
    • 指数位:11
    • 尾数位:52

 

long double 长双精度浮点数占16个字节 共128位

    • 符号位:1
    • 指数位:64
    • 尾数位:63

 

 

十进制浮点数转换成二进制浮点数

如 20.5 先转换整数部分 然后浮点数部分

用小数去乘以2 然后剩余的结果减去整数部分继续乘2 直到一直结果为0或者循环

例1:计算  20.5的二进制 

20 = 10100 (二进制) 然后小数部分0.5

0.5 * 2 = 1.0  (1)

去除整数部分1 剩 0 不用计算了 所以小数部分是 1

20.5 = 10100.1(二进制) = 1.01001E100 (转成二进制科学计数法,这里的E不是10了是2)

最后 我们来转成float类型存储的二进制

(符号位) – (指数位+127) – (尾数位)

(0) – (00000100 + 01111111 = 10000011 ) –(01001000000000000000000)

关于指数位计算采用移位存储 float类型+127  double+1023

所有最终存储结果是

20.5 = 0-10000011-01001000000000000000000

 

例2: 计算20.3的二进制

20 = 10100(二进制)

0.3  * 2 = 0.6 (0)

0.6 * 2 = 1.2  (1)

0.2 * 2 = 0.4  (0)

0.4 * 2 = 0.8 (0)

0.8 * 2 = 1.6 (1)

0.6 * 2 = 1.2 (1)  ----到这步就开始循环了

所以小数部分是 0.010011001….1001

20.3 = 10100.010011001….1001(二进制) = 1.0100010011001E101

(符号位) – (指数位+127) – (尾数位)

(0) – (00000101 + 01111111 = 10000100) –(010011001….1001)

最重存储结果是

0-10000100-01001100110011001100110

你可能感兴趣的:(2014.12.26浮点数的存储方式)