浮点数存储⽅式
|--浮点数怎么存储在计算机中
  浮点型变量是由符号位+阶码位+尾数位组成。
  float型数据⼆进制为32位,符号位1位,阶码8位,尾数23位
  double型数据⼆进制为64位,符号位1位,阶码11位,尾数52位
|--单精度32位存储
  1bit 8bit 23bit
|--双精度64位存储
  1bit 11bit 52bit
  浮点数⼆进制存储形式,是符号位+阶码位+尾数位(针对有符号数)
  浮点数没有⽆符号数(c语⾔)
|--阶码:
  这⾥阶码采⽤移码表⽰,对于float型数据其规定偏置量为127,阶码有正有负,
  对于8位⼆进制,则其表⽰范围为-128-127,double型规定为1023,其表⽰范围为-1024-1023
  ⽐如对于float型数据,若阶码的真实值为2,则加上127后为129,其阶码表⽰形式为10000010
|--尾数:
  有效数字位,即部分⼆进制位(⼩数点后⾯的⼆进制位),
  因为规定M的整数部分恒为1(有效数字位从左边不是0的第⼀位算起),所以这个1就不进⾏存储
|--具体步骤:
  把浮点数先化为科学计数法表⽰形式,eg:1.1111011*2^6,然后取阶码(6)的值加上127(对于float)  计算出阶码,尾数是处⼩数点后的位数(1111011),如果不够23位,则在后⾯补0⾄23位。
  最后,符号位+阶码位+尾数位就是其内存中⼆进制的存储形式
1    eg:
2        #include <stdio.h>
3        #include <stdlib.h>
4        int main(int argc, char *argv[])
5        {
6            int x = 12;
7            char *q = (char *)&x;
8            float a=125.5;
9            char *p=(char *)&a;
10
11            printf("%d\n", *q);
12
13            printf("%d\n",*p);
14            printf("%d\n",*(p+1));
float型15            printf("%d\n",*(p+2));
16            printf("%d\n",*(p+3));
17return 0;
18        }
19
20    output:
21        12
22        0
23        0
24        -5
25        66
|--对于float型:
  125.5⼆进制表⽰为1111101.1,由于规定尾数的整数部分恒为1,
  则表⽰为1.1111011*2^6,阶码为6,加上127为133,则表⽰为10000101
  ⽽对于尾数将整数部分1去掉,为1111011,在其后⾯补0使其位数达到23位,  则为11110110000000000000000
  内存中的表现形式为:
            00000000 低地址
            00000000
            11111011
            01000010 ⾼地址
            存储形式为: 00 00 fb 42
            依次打印为: 0 0 -5 66
  解释下-5,内存中是:11111011,因为是有符号变量所以符号位为1是负数,  所以其真值为符号位不变取反加⼀,变为:10000101化为⼗进制为-5.