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得到补码

数据为什么在内存中以补码形式存储?原因在于使用补码可以将符号位和数值位统一处理进行存储。

我们虽然了解数据在内存中的存储形式,但字节实际存放在内存里的顺序有所不同

大端存储模式(大端字节序存储):数据低位保存在内存高地址中,数据的高位保存在低地址中。

小端存储模式(小端字节序存储):数据低位保存在内存低地址中,数据的高位保存在高地址中。
2020/10/4剖析数据在内存中的存储

浮点型在内存中的存储

根据IEEE754,任何二进制浮点数都可以表示成如下形式:

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

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

  • M表示有效数字,在[1,2)区间内

  • 2^E是指数位

    IEEE 754规定:单精度,双精度浮点数在内存中存储模型如下:
    2020/10/4剖析数据在内存中的存储

    举个例子:十进制的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