浮点数在内存中的存储



浮点数在内存中的存储:
  目前所有的c/c++编译器都是采用IEEE所制定的标准浮点数格式,即二进制科学表示法。
  在二进制科学表示法中,S=M*2^N 主要由三部分构成:符号位+阶码(N)+尾数(M)。对于float型数据,其二进制有32位,其中符号位1位,阶码8位,尾数23位;对于double型数据,其二进制为64位,符号1位,阶码11位,尾数52位。
 

                  31        30-23         22-0
        float       符号位       阶码         尾数    
                     63        62-52         51-0
        double      符号位       阶码         尾数

 

  符号位:0表示正,1表示负


  阶码采用移码表示,对于float型数据其规定偏移量为127,double数据其规定偏移量为1023,阶码有正有负。对于8为二进制,则其表示范围为 -128~127。比如对于 float 型数据,若阶码的真实值为2,则加上127后为129,其阶码表示形式为 10000010

  尾数:有效数字,即部分二进制位,因为规定M的整数部分恒为1,所以这个1就不进行存储了。

#include<stdio.h>
int main()
{   
float f= 93.36;   char *p=(char *)&f;   printf("%d\n",*p);   printf("%d\n",*(p+1));   printf("%d\n",*(p+2));   printf("%d\n",*(p+3));   return 0; }

  输出结果:
    82
    -72
    -70
    66

  由于内存中二进制是以补码存储的。

posted @ 2017-04-16 10:52  lzlBuilder  阅读(188)  评论(0编辑  收藏  举报