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

原创 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)

现在你会了吗?


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

相关文章推荐

2017补全计划-JS引擎,UI引擎-学习笔记

参考资料有点多:一篇给小白看的 JavaScript 引擎指南浅析JavaScript引擎的技术变迁浏览器渲染的那些事(一)浏览器渲染的那些事(二)浏览器渲染的那些事(三)浏览器的JavaScript...
  • ReusLi
  • ReusLi
  • 2017年02月05日 21:28
  • 302

回车换行问题0x0D和0x0A

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这...

浮点数在内存中的存储方式

浮点数在内存中的存储方式 浮点数保存的字节格式如下: 地址        +0          +1           +2           +3 内容    SEEE EEEE...

浮点数在内存中的存储表示

c语言中的浮点数在内存中的表示(VC++编译器中): char:1个字节 short:2个字节 int:4字节 long:4字节 float:4字节(单精度) double:8字节(双精度...
  • hxz_qlh
  • hxz_qlh
  • 2013年11月03日 19:51
  • 1050

浮点数在内存中存储

今天,看到一篇关于浮点数在内存中的存储问题,发现两个例子都问题,所以写了这篇关于浮点数的存储问题。 我们用一个个例子说话。   float:4字节(单精度)      double:8字节(双精...

浮点数在内存中的存储方式

浮点数保存的字节格式如下: 地址 +0 +1 +2 +3 内容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 这里 S 代表符号位,1是负,0是正 ...
  • qaabq
  • qaabq
  • 2011年08月18日 21:03
  • 109

C/C++浮点数在内存中是怎么存储的?

任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100。则在Intel CPU架构的系统中,存放方式为  10000100(低...

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

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

python实现double型浮点数在内存中的存储样式转换接口

话不多说 ,直接上代码 import decimal def convertDouble2Bin(double):       """      function:将十进制双精...

整数,浮点数在内存中的存储

整数浮点数在内存中的存储
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浮点数在内存中的存储(简述)
举报原因:
原因补充:

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