2020104剖析数据在内存中的存储

    科技2022-07-20  121

    数据类型分为:

    内置类型 自定义类型

    一 常见的内置类型:

    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 754/3869922?fr=aladdin

    Processed: 0.013, SQL: 8