2020/10/4剖析数据在内存中的存储
数据类型分为:
内置类型 自定义类型
一 常见的内置类型:
-
char //字符数据类型
-
short //短整形
-
int //整形
-
long //长整型
-
long long //长长整形
-
float //单精度整形
-
double //双精度整形
二 自定义类型:
数组类型
结构体类型
枚举类型
联合类型
整形家族
char(一个字节,4bit)
unsigned char:无符号位,表示范围:0—255
signed char:最高位是符号位,1表示负数,0表示正数。可表示数字范围: -128—127
short(两个字节,8bit)
unsigned short [int]
signed short [int]
int (四个字节,32bit)
unsigned int
signed int
long (四个字节,32int)
unsigned long [int]
signed long [int]
浮点型家族
float:单精度浮点型
double:双精度浮点型
指针类型
int *pi
char *pc
float *pf
void *pv
空类型
void 表示空类型
整形在内存中的存储
整形分为有符号整形,无符号整形。
有符号整型分为正整形和负整形。
对于整形来说:数据在内存里是以补码形式存放(正整形和无符号整形原码反码补码相同)。
原码
直接将整形按照正负数形式翻译成二进制
反码
原码符号位不变,其他位依次按位取反(二进制最高位为符号位,0表示正数,1表示负数)
补码
反码+1得到补码
数据为什么在内存中以补码形式存储?原因在于使用补码可以将符号位和数值位统一处理进行存储。
我们虽然了解数据在内存中的存储形式,但字节实际存放在内存里的顺序有所不同
大端存储模式(大端字节序存储):数据低位保存在内存高地址中,数据的高位保存在低地址中。
小端存储模式(小端字节序存储):数据低位保存在内存低地址中,数据的高位保存在高地址中。
浮点型在内存中的存储
根据IEEE754,任何二进制浮点数都可以表示成如下形式:
(-1)^S * M * 2^E
-
(-1)^S表示符号位,S=0表示正数,S=1表示负数
-
M表示有效数字,在[1,2)区间内
-
2^E是指数位
IEEE 754规定:单精度,双精度浮点数在内存中存储模型如下:
举个例子:十进制的5.5,写成二进制为101.1,相当于1.011 * 2^2.按照上边格式就是 S=0, M=1.011, E=2。
对于有效数字M和指数部分E还有具体规定。https://baike.baidu.com/item/IEEE%20754/3869922?fr=aladdin