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的中,拿出的时候加上进行了。
知道这些我们就可以对开始的那个例子进行解释了