一文搞懂数据在内存中的存储

  • 数据类型
  • 整型在内存中的存储
  • 大小端字节序
  • 浮点型在内存中的存储

 

数据类型

整型家族

char         unsigned char         signed char;

short       unsigned  short      signed  short;

int            unsigned  int           signed  int;

long.       unsigned  long      signed long;

unsigned 无符号数值 在现实生活中有些数值 只有正数 没有负数 (身高)

signed 有符号数值  像温度 有正数也有负数

单写char类型 未明确标出是什么类型数值 而取决于编译器;

而int short等 统一默认为有符号类型 ;

浮点型家族

float.  double

构造类型   自定义类型

数组          结构体struct        枚举类型enum         联合类型union

整型在内存中的存储 

原码  反码  和 补码

原码 : 即该数值的二进制序列 

反码 : 即该数值的二进制序列的基础上,符号位不变,其他为取反

补码 : 即该数值的反码的基础上,+1;

int b = -10;
原码 10000000 00000000 00000000 00001010
反码 11111111 11111111 11111111 11110101
补码 11111111 11111111 11111111 11110110

符号位:在32位机器下 开头第一个数值 为符号位 1为负值 0为正值
剩下31位机位有效数值位

 对于整型来说在内存中存储的是补码;

而显示给我们看的 是十六进制;

 通过这个例子我们能明白整型数据在内存中是以补码存储的,不过你肯定要问 为啥内存里显示的是F6 FF FF FF 这就要介绍下大小端字节序了

大小端字节序

一个数值超过一个字节(8个bit)要存储到内存中 就会出现顺序的问题;

大端:数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中;

小端:数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中;

什么是数据的 高位 低位

例如123

1 (百位)2(十位) 3(个位) 

而1相对于23就是高位

而3相对于12就是低位

 浮点型在内存中的存储

浮点数存储规则

国际标准 任意一个二进制浮点数V可以表示成下列形式

  • (-1)^S*M*2^E
  • (-1)^S表示符号位,当S = 0 ,V为正数,当S=1,V为负数;
  •    M表示有效数字(肯定是大于等于1,小于2)
  •    2^E表示指数位

eg V = 5.5 = 1 0 1 . 1 = 1.011*2^2 = (-1)^0*1.011*2^2

S = 0 , M = 1.011 , E = 2

关于M,E的特殊规定 

M的取值范围一定在 1 <= M < 2 内;所以在计算机内部存储M时 会默认这个数的第一位总是1;

为了提高精度,默认第一位为1 ,且不存储 ,在后面读取时1再加上去

E 指数E 为一个无符号整数 但现实生活中 科学计数法中 E是可以出现负数

所以 规定:存入内存时 E的真实值必须加上一个中间值

float类型 + 127

double类型 + 1023

在读取 中E从内存中取出还可以分成三种情况

  1. E不为全0 或不为全1
  2. E为全0
  3. E为全1

在 E不为全0 或不为全1中 即指数E(减去127(1023))得到真实值,M再加1;

在 E为全0中 指数E等于(1-127)或者(1-1023)1.xxxxx * 2^-127是一个非常非常小的数字

有效数字M不再加上第一位的1,而是0.xxxx 无限接近于0的很小的数字

在 E为全1中 1.xxxxx*2^128 是一个非常非常大的正数,无穷大;

结尾

数据在内存中的存储介绍就到这里了,都看到这里了 不给点赞吗 QAQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值