数据在内存中的存储

一.数据在内存中的存储

存储方式可分为大端字节序存储和小端字节序存储两种。

大端字节序存储:

把数据的低位字节内容放在高地址处,高位字节内容放在地地址处。

                 11               22                      33                         44

         低地址     ——————————————————————————>    高地址

小端字节序存储:

把数据的低位字节内容放在低地址处,高位字节内容放在高地址处。

                   44                    33                   22                        11

              低地址——————————————————————————>    高地址

二.整数在内存中的存储

整数在内存中以补码的形式存放,最高位表示符号位(0表示正数,1表示负数)。

正整数: 原码,反码,补码都相同。

负整数: 原码  ——  符号位不变,数值取反  ——>  反码 ——      +1   ———>  补码

在存储时可能出现截断当再次取出时先要整形提升。

例:        

int main()
{
	char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("a=%d     b=%d    c=%d", a, b, c);
	return 0;
}

    结果:   

          

   -1:原码:10000000000000000000000000000001   

          反码:11111111111111111111111111111110

          补码:11111111111111111111111111111111

在存储的过程整char类型为8个比特位,发生截断,存储低8位。

内存中a:11111111      b:11111111        c:11111111

以%d(十进制有符号整数)的形式打印

进行整形提升:无符号高位补0,有符号高位补符号位。

a:11111111111111111111111111111111

b:11111111111111111111111111111111  

c:  00000000000000000000000011111111

三.浮点数在内存中的存储

存储方式IEEE(电气和电子工程协会)754标准:

任意的二进制浮点数V可表示为:

    V=(-1)^s  * M  *  2^E

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

M表示有效数字

2^E表示指数位

例:

        10进制:5.5         2进制:101.1           科学计数法:1.011 * 2^2

            V=(-1)^0 * 1.011 * 2^2

            S=0

            M=1.011

            E=2

float类型:
  

    第一位为S         第二位到第九位为E          后23位为M

double类型:

  第一位为S          第二位到第九位为E        后52位为M   

存储规定:

M:M为1.xxxxxx默认第一位总是1(舍弃)只保留后面的xxxxx

例:1.01只保存01,读取时再加第一位的1(节省一位有效数字,提高精度)   

E:E为无符号整数  float类型范围:0-255   double类型范围:0-2047

因为科学技术法中E可能为负数,所以在内存中E的值为E+中间数

float类型:E=E+127      double类型: E=E+1023

例:5.5         E:2+127=129

0      10000001      01100000000000000000000

S            E                        M

取出规定:

E不全为0或不全为1:

E减去127(或1023)得到实际值,再将有效数字M前加上第一位的1

E全为0:

表示该数接近于0,E为1-127(或1-1023)得到实际值,M不再加第一位的1,还原为0.xxxxx

E全为1:

若M全为0,表示正负无穷大

  • 32
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值