我也要学C语言-第七章:IEEE浮点数表示法

Posted on 2011-05-24 16:57  dodolook  阅读(3338)  评论(37编辑  收藏  举报

  之前呢,已经学习过无符号,有符号整数的表示(用补码),其实还有2个类型我没有说过,就是字符型和字符串型,主要我觉得这2种类型比较简单,看1会说就明白。字符型是用的阿斯卡码表示的,字符串型也一样,只是C的字符串呢,在结尾有个00。这个00就是判断字符串是否结束!引用字符串的变量其实就是代表字符串的首地址,然后呢依次检查下去,只要遇到了00就代表此字符串结束了。

IEEE浮点表示法

  IEEE浮点数表示:符号位(1位) +     指数位置(8位)   +尾数位(23位)

  1:将要表示的浮点数转化为二进制表示。比如:

    123456.0f = 11110001001000000

  2:然后移动小数点到最高位只有1位的1。比如:

    1.1110001001000000 一共移动了16位

  3:因为小数点每向左移动一位就相等于以2为底的指数加1.所以:

    1.1110001001000000 * 2^16

  4:指数部分呢一共是需要8位,把十进制的指数转化为二进制时先加上127(为什么要加127是因为它把127当着0.因为移位不只是往一边移,8位中间点正是7F,7F就是十进制的127).例如:

    16+127=143 = 10001111

  5:12345.0f由于是正数,所以符号位为0.(注意:尾数位少了1个1,是因为最高位肯定是1,所以为了节约内存考虑)所以:

    符号位(1位) +     指数位置(8位)   +尾数位(23位)

                  0                   10001111             11100010010000000000000

     然后!再组合起来!01000111111100010010000000000000

  然后!再4位1组!!  0100 0111 1111 0001 0010 0000 0000 0000

  然后! 再转化成16进制   4     7       F      1        2      0      0      0

  然后!再组合起来!47F12000

  然后!再倒过来! 0020F147(为什么要倒过来是因为VC内存排列是高位对高位,低位对低位)

  然后!再进行检验!:

  这样!我们就知道调试浮点数的时候,为什么内存里面的内容怪怪的了!!!