浮点数在内存中的存储(简述)

数据类型:

1.基本类型(整形,浮点型,字符型)

2.构造类型(数组,结构体,联合,枚举)

3.指针类型

查看数据范围:整形范围(limits.h) 浮点型类型(flaot.h)

eg:有符号的char的表示范围:0000 0000~1111 1111(-128~127)其中最高位表示符号位,0为正 1为负

spacer.gif

其实数据的存储和访问就下像作图这个圈一样,当你给它的127+1它就会变成128

整形变量:

一般来说字长为32的情况下,整形表示32位,短整形16位,长整形32位

数据在计算机中以补码的形式存储

正数的原反补码均相同,负数的补码是它的反码+1得到

浮点数:

整数的存储我们都十分的熟悉,但浮点数在我们的计算机里是怎么存储的呢?

我们试着来实现以下程序:

int main()
{
     int num=9;
      float *p=(float *)#
     printf("%d",num);
     printf("%f",*p);
}

wKioL1ZN41SiM4HpAAAkHpNDtuA498.png



int main()
{
     int num;
      float *p=(float *)#
     *p=9.0;
     printf("%d",num);
     printf("%f",*p);
}

wKioL1ZN41Tz_eF8AAAhq5lfv5c867.png

为什么会出现这样的现象呢?

这很正常,因为浮点数在内存中的存储方式和我们的整形变量是完全不一样的

那么浮点数是怎么存放的呢

一般来说我们使用科学计数法将10进制浮点数表示成N.XXXX*10^M;

而浮点数在计算机里存放时,我们的计算机也将它表示成(-1)*S*M*2^E     

其中S表示符号位,M表示尾数,E表示指数

在字长32的计算机中

最高位存放符号位,中间8位存放指数部分,剩下的部分存放尾数。

我们来看看9.0在内存中是怎么存放的!

0100 0001  0001 0000 0000 0000 0000 0000

我们现在以浮点数的存储方式将它分开来看

0 10000010 001 00000000 00000000 00000000

第一位表示符号位 中间八位是阶码 最后紧跟存尾数

9.0在计算机里先表示为1001 以IEEE754标准表示成1.001*2^(3)

在我们存入内存时必须给我们的E加上中间数来调整,对于8位的E我们加上127来调整

所以中间部分表示为1000 0010 (3+127)

现在你会了吗?


你可能感兴趣的:(计算机,程序,结构体,联合)