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

数据类型:

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

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

3.指针类型

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

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

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

整形变量:

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

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

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

浮点数:

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

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

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

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

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

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

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

一般来说我们使用科学计数法将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)

现在你会了吗?

时间: 2024-11-06 14:20:09

浮点数在内存中的存储(简述)的相关文章

移码及浮点数在内存中的存储方式

首先说一下十进制的小数怎么转化为二进制的小数,计算机根本就不认识10进制的数据,他只认识0和1,所以,10进制的小数在计算机中是用二进制的小数表示的. 十进制的小数转化为二进制的小数的方法: 可以简单的概括为正序取整,将十进制的小数部分乘以2,然后取整数部分. 例如将0.2转化为二进制的小数,那么0.2*2=0.4,其整数部分是0,所以二进制小数的第一位为0,然后0.4*2=0.8,其整数部分是0,所以二进制小数的第二位为0,然后0.8*2=1.6,其整数部分是1,所以二进制小数的第三位是1,然

C/C++浮点数在内存中的存储方式

任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中,存放方式为  10000100(低地址单元) 00000100(高地址单元),因为Intel CPU的架构是小端模式.但是对于浮点数在内存是如何存储的?目前所有的C/C++编译器都是采用IEEE所制定的标准浮点格式,即二进制科学表示法. 在二进制科学表示法中,S=M*2^N 主要由三部分构成:符号位+阶码(N)+尾数(M).对于fl

C语言中浮点数在内存中的存储方式

关于多字节数据类型在内存中的存储问题 //////////////////////////////////////////////////////////////// int ,short 各自是4.2字节.他们在内存中的存储方式以下举个样例说明. int data = 0xf4f3f2f1; 当中低位存放在编址小的内存单元.高位存放在编址高的内存单元 例如以下: 地址:0x8000      0x8001    0x8002   0x8003 数据:   f1              f2 

[算法]浮点数在内存中的存储方式

float型变量占用32bit,即4个byte的内存空间 我们先来看下浮点数二进制表达的三个组成部分. 三个主要成分是: Sign(1bit):表示浮点数是正数还是负数.0表示正数,1表示负数 Exponent(8bits):指数部分.类似于科学技术法中的M*10^N中的N,只不过这里是以2为底数而不是10.需要注意的是,这部分中是以2^7-1即127,也即01111111代表2^0,转换时需要根据127作偏移调整. Mantissa(23bits):基数部分.浮点数具体数值的实际表示. 下面我

float 在内存中如何存储的

float类型数字在计算机中用4个字节存储.遵循IEEE-754格式标准:    一个浮点数有2部分组成:底数m和指数e 底数部分 使用二进制数来表示此浮点数的实际值指数部分 占用8bit的二进制数,可表示数值范围为0-255 但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数.    所以,float类型的指数可从-126到128 底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit    科学计数法. 格式:SE

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

C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53. 无论是单精度还是双精度在存储中都分为三个部分: 符号位(Sign)

浮点数在内存中的表示

        1. 浮点数的二进制格式. 浮点数的二进制格式如下, 分为 3 个部分, 即 sign (符号位), exponent (指数位), 以及 significand (有效数位). 如下图所示: single-precision floating point(单精度浮点数), 4 字节, 共 32 位: 31            23   22                               0         +---------------------------

整型数与浮点数在内存中的表示

落下的基础还是要早点补起来的... 整型数在内存中存储 正整数 以int a = 25为例 1.      将a用2进制表示 (25)10 = (11001)2 因为int型在内存中占4个字节,也就是32位,实际是 (0000 0000 0000 0000 0000 0000 0001 1001) 2.      用16位表示 (0 0 0 0 0 0 19) à(00 00 00 19) 在内存中低地址在高位,也就是 19 00 00 00 负整数 以int b = -25为例 1.    将

float、double的精度、范围,在内存中的存储方式

float.double的精度,在内存中的存储方式 ? 一.浮点型变量在内存中的存储方式 Java的浮点数遵循IEEE 754标准,采用二进制数据的科学计数法来表示浮点数,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53.该标准中表示的浮点数表示分为规约形式和非规约形式以及特殊情况. ??? 无论是单精度还是双精度在存储中都分为三个部分: 符号位(Sign) : 0代表正,1代表为负 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储 尾