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

原创 2016年05月30日 13:34:44

数据类型:

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)

现在你会了吗?


版权声明:本文为博主原创文章,未经博主允许不得转载。

深入理解计算机系统-之-数值存储(五)--浮点数在内存中的存储方式

前景回顾前面我们了解到依据CPU的端模式的架构不同,数据的存储的字节序也不同 BE big-endian 大端模式,最直观的字节序 地址低位存储值的高位,地址高位存储值的低位 ,数据填写时,不要考...
  • gatieme
  • gatieme
  • 2016年02月21日 17:19
  • 2648

算法竞赛入门经典------浮点数整数在内存中的存储方式

算法竞赛入门经典---浮点数整数在内存中的存储方式 参考文章:http://www.cnblogs.com/zxtp/p/4938742.html 1、数据的存储方式:大端模式和小端模式 ...
  • liyuqian199695
  • liyuqian199695
  • 2017年02月18日 19:10
  • 470

浮点数在计算机中存储方式---IEEE754格式存储

简单总结: 单精度浮点数: 1位符号位   8位阶码位   23位尾数 双精度浮点数: 1位符号位   11位阶码位   52位尾数 单精度float型存储在内存中的大小为4个字...
  • changgui5211
  • changgui5211
  • 2015年07月12日 01:41
  • 806

浮点型数据在计算机内存中存储原理

浮点型数据在计算机内存中存储原理: 1、float占32bit,double占64bit; 2、float和double存储精度:     float可以保证十进制科学计数法小数点后...
  • lovezhangmi
  • lovezhangmi
  • 2017年04月01日 22:36
  • 367

浮点数在计算机内存中是如何存储的?

对于一个整数,我们可以很方便的在十进制与二进制中转换,但是对于一个浮点数来说不是这么容易——因为小数点的存在。对于浮点数来说,小数点的位置不是固定的(小数点后面的数的个数不定),所以如何存储小数点是一...
  • x413743244
  • x413743244
  • 2013年12月04日 18:16
  • 3177

C++中浮点数在内存中的表示

复制了两篇文章的内容: http://blog.csdn.net/nethibernate/article/details/6120382 http://www.cnblogs.com/dol...
  • u012501459
  • u012501459
  • 2015年03月11日 17:04
  • 1201

深入谈谈整型、浮点型在内存中的存储方式

先简介一下大小端模式 大端模式:Big-Endian 就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端 小端模式:Little-Endian 就是低位字节排放在内存的低地址端,高位字节排...
  • czg13548930186
  • czg13548930186
  • 2016年12月02日 13:41
  • 1241

Java 浮点数是如何存储的?

看一个面试题,   考察面试者对浮点数存储格式的理解 : public class Float_Double { public static void main(String[] args) { ...
  • aduovip
  • aduovip
  • 2015年08月17日 18:37
  • 2358

浮点数在内存中的表示移位存储难点的理解

我们知道,单精度浮点数,在内存中是使用32位存储;那么这8位组成的新的字节,我们来用下面的一串数字;00000000;对的,实际上这个就是浮点数幂指数(阶码)的存储空;首先,我们假设不使用移位存储(就...
  • michaelhan3
  • michaelhan3
  • 2017年05月29日 14:41
  • 869

c++中浮点数的存储方式

浮点数的存储方式
  • huai1693838234
  • huai1693838234
  • 2015年03月11日 22:05
  • 790
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浮点数在内存中的存储(简述)
举报原因:
原因补充:

(最多只允许输入30个字)