0
点赞
收藏
分享

微信扫一扫

数据在内存中的大小端存储 整型数据的存储和拿出方式 浮点型数据的存储和拿出方式。

萧让听雪 2022-03-11 阅读 186

1:大小端存储

我们知道数据在内存中都是有地址指向的,那么一个整形的数据到底是怎么存储的呢

我们打开内存监视窗口可以看到

二进制   00000000 00000000 00000000 10000000--->a

十六进制  00  00  00  80--->a      80被存储在低地址中,高位都是0,都存储在高地址中。

这种存储方式被称为小端存储:数据的高位存储在高地址中,数据的低位存储在低地址中。

与之对应的大端存储  :数据的高位被存储在低地址中,低位被存储在高地址中。

2:在c语言中,有两大类型的数据

2.1:整形数据

( char: 字符在内存中都是以ascll码进行储存,所以他是属于整形的范围。)

#include<stdio.h>
int main()
{
	int a = 128;
	char b = 1;
	int c = a + b;
	char d = a + b;
	printf(" %d\n", c);
	printf("%d\n", d);
	printf(" %u\n", d);
	return 0;
}

//运行结果
//129
//-127
//4294967169

int a=1;

int b=1;

int c=a+b;

char  d=a+b;

以有符号整型打印d

以无符号整型打印d:

2.2:浮点型数据

他的存储方式是不是和整形的存储方式相同呢,下面我们通过一个示例来看一下

 从这个例子我们可以知道,整形和浮点型数据的存储,和取出方式都不相同。

浮点型数据的存储(只限c语言)

根据IE754标准,任何一个二进制浮点数  x 都可以表示成下面这种形式

(-1)^s*M*2^E,

这里的s  M  E 的作用形式如下:

(-1)^s   s表示符号位,s=0,表示正,s=1,表示负

M 表示有效数字(M必须满足的条件1<=M<2)

E 表示指数位

浮点型的32位二进制位中被分配给了  s(1个比特位)      e(8个比特位)    m(23个比特位)  

 这里详细说一个E 位的放置和M位的放置

1:E是一个size-t形式的数据,但是如果要将0.5放入一个float型数据的话

所以我们需要E是一个负值,但是定义里E是一个无符号数,所以在对E中数据进行存储时,会对它先加上一个127(float型) 或者1023(double),拿出的时候再减去。

2:M位置的放置

因为M必须大于等于1,小于2,所以在对M数据进行放置的时候,会将小数点前面的那个1不放入M的中,拿出的时候加上进行了。

知道这些我们就可以对开始的那个例子进行解释了

举报

相关推荐

0 条评论