C语言数据在内存中的存储

目录

一,数据类型

二,整型在内存中存储

1.原码,反码,补码

2.大小端介绍

 2.1:大端存储模式

 2.2:小端存储模式

三,浮点型在内存中的存储

1,浮点数的存储方式

  1.1  任意一个二进制的浮点数(V)可以表示成下面的形式:

  1.2 float和double存储方式有所区别:

2,对有效数字M和制数E

    2.1有效数字M

    2.2 指数E的取出


一,数据类型

类型的意义:

             1:使用这个类型开辟内存空间的大小(大小决定了使用范围)。

             2:看待内存的视角

二,整型在内存中存储

变量的创建是要在内存中开辟空间的,空间的大小是根据不同的类型来决定的。

1.原码,反码,补码

数据在内存中的以二进制的形式存储。

对于整型来说有三种形式:原码,反码,补码。

正整数的原码,反码,补码相同 ; 负整数的需要计算。

计算方式:反码是原码(最高位符号位不变)按位取反,补码是反码+1,如:

 然后从右向左或从左向右八位一组写进内存

2.大小端介绍

上面我们说了,从右向左或从左向右八位一组写进内存,为什么会出现两种情况呢?这就引出了大小端问题。

 2.1:大端存储模式

     指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中。

2.2:小端存储模式

    指数据的低位保存在内存的低地址中,数据的高位保存在内存的高地址中。

用图解去了解这两种存储模式。

 不同的编译器存储的模式也会不一样,有的是大端有的是小端,如何判断自己的编译器是大端存储还是小端存储?

1.我们可以查看内存:

内存地址从左向右递增,可以看到是小端存储方式。

2.我们也可以通过代码的方式观察

int main()
{
	int a = 1;
	char* p = (char*)&a;
	int pa = *p;
	if (pa == 1)
	{
		printf("小端模式\n");
	}
	else
		printf("大端模式\n");
	return 0;	
}

三,浮点型在内存中的存储

         浮点型和整型在内存中的存储方式是有区别的

1,浮点数的存储方式

  1.1  任意一个二进制的浮点数(V)可以表示成下面的形式:

                             (-1)^S * M * 2^ E 

    (-1)^S 表示符号位, 当 S = 0时,V为正数; 当S =1 时 V 为负数。

    M 表示有效数字 ,大于等于1 , 小于 2。

     2^E 表示指数位 。

例:

1.2 float和double存储方式有所区别:

2,对有效数字M和制数E

    2.1有效数字M

     M :    1<= M < ,默认M的第一位总是1,因此可以被舍去,只保存后面的小数部分,比如,保存1.01时,我们舍去有效数字1只保存01 ,等到读取的时候再把第一位的1加上去。

     E :       E位无符号整数,如果E为8位,则取值范围时0~255,若E为11位,取值范围是 0~2047

                 但是科学计数法中的E是可能会出现负数的,所以我们:

                对于8位的E :  E = E + 127

                对于11位的E : E = E +1023

  

   2.2 指数E的取出

    1:E不全为0或者不全为1

         指数E的计算值减去127(或1023)得到真实值。

    2:E全为0

          指数E等于1~127 (或 1~1023)即为真实值

          有效数字M不再加上第一位的1 ,而是还原为0.XXXXXX的小数

        (这样做是为了表示±0,以及接近于0的很小的数字)

    3:E全为1

          如果有效数字M全为0,表示 ± 无穷大(正负取决去S) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值