-深度剖析数据在内存中的存储

在此之前我们学习过很多的数据类型例如:

char//大小为1个字节

short//大小为两个字节

int//大小为四个字节

long//大小为四个字节

long long//大小为八个字节

float//大小为四个字节

double//大小为八个字节

整形家族
char
unsigned char
signed char
short
unsigned short [ int ]
signed short [ int ]
int
unsigned int
signed int
long
unsigned long [ int ]
signed long [ int ]
浮点数家族
float
double
构造类型
> 数组类型 int []  // char []......
> 结构体类型 struct
> 枚举类型 enum
> 联合类型 union

指针类型

int * pi ;
char * pc ;
float* pf ;
void* pv ;
空类型
void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型
整形在内存中的存储
 首先我们先了解一下 原码 反码 补码
三种表示方法均有 符号位 数值位 两部分,符号位都是用 0 表示 ,用 1 表示 ”,而数值位负整数的三种表示方法各不相同。
原码
直接将二进制按照正负数的形式翻译成二进制就可以。
反码
符号位不变,将反码的二进制位按位取反。
补码
反码加一得到补码。
对于正数的原反补码都相同。
对于整形来说:数据存放内存中其实存放的是补码。
为什么呢?
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统
一处理;
同时,加法和减法也可以统一处理( CPU 只有加法器 )此外,补码与原码相互转换,其运算过程
是相同的,不需要额外的硬件电路。
2.2 大小端介绍
在我们调试读取内存时我们发现 补码在内存中的存储顺序和我们写的有可能不同 那么这是啊很么原因呢?
下面我们引进一个新的概念 : 大小端字节序
大端(储存)方式:指数据的二进制位的低位存到高地址处,高位存到低地址处。
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位 , ,保存在内存的高地
址中。
2.3 浮点数在内存中的存储
根据国际标准 IEEE (电气和电子工程协会) 754 ,任意一个二进制浮点数 V 可以表示成下面的形式:
(-1)^S * M * 2^E
(-1)^s 表示符号位,当 s=0 V 为正数;当 s=1 V 为负数。
M 表示有效数字,大于等于 1 ,小于 2
2^E 表示指数位。
举例来说:
十进制的 5.0 ,写成二进制是 101.0 ,相当于 1.01×2^2
那么,按照上面 V 的格式,可以得出 s=0 M=1.01 E=2
十进制的 -5.0 ,写成二进制是 - 101.0 ,相当于 - 1.01×2^2 。那么, s=1 M=1.01 E=2
IEEE 754 规定:
对于 32 位的浮点数,最高的 1 位是符号位 s ,接着的 8 位是指数 E ,剩下的 23 位为有效数字 M

IEEE 754对有效数字M和指数E,还有一些特别规定。

前面说过, 1≤M<2 ,也就是说, M 可以写成 1.xxxxxx 的形式,其中 xxxxxx 表示小数部分。
IEEE 754 规定,在计算机内部保存 M 时,默认这个数的第一位总是 1 ,因此可以被舍去,只保存后面的 xxxxxx部分。比如保存 1.01 的时候,只保存01 ,等到读取的时候,再把第一位的 1 加上去。这样做的目的,是节省 1 位有效数字。以 32 位 浮点数为例,留给M 只有 23 位, 将第一位的1 舍去以后,等于可以保存 24 位有效数字。
至于指数 E ,情况就比较复杂。
首先E是一个无符号整数;
这意味着e能存放0~255大小的数字;如果E是11位的话可以存到2047;但是我们学习过科学计数法知道E有可能是负数所以IEEE 754 规定,存入内存的E的真实值碧玺还要加上一个中间数127(8bit)或1023(11bit)。
然后,指数 E 从内存中取出还可以再分成三种情况

 E为全0的情况:

E为全1的情况: 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值