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

目录​​​​​​​

一、数据类型的介绍

1.类型的基本归类

二、整型在内存中的存储

1、原码、反码、补码

2、大小端介绍

三、浮点数在内存中的存储

1、浮点数的存储规则

一、数据类型的介绍

基于所学知识,我们已经知道了基本的内置类型以及占存储空间的大小:

char        //字符数据类型  1
short       //短整型       2
int         //整型         4
long        //长整型       4/8
long long   //更长的整型    8
float       //单精度浮点型  4
double      //双精度浮点型  8

 类型的意义:

1.使用这个内存开辟内存空间的大小(大小决定了使用的范围)

2.如何看待内存空间的视角

1.类型的基本归类

整型

char
    unsigned char
    signed char
short
    unsigned shout
    signed short
int
    unsigned int
    signed int
long
    unsigned long
    signed long
long long
    unsigned long long
    signed long long

字符的本质是ASCII值,故划为整型

浮点数家族

float//精度较低,存储的数据范围较小
double//精度较高,存储的数据范围大

构造类型

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

指针类型

int* pi;
char* pc;
float* pf;
void* pv;//泛型指针

空类型:void表示空类型,通常用于函数的返回类型、函数的参数、指针类型(泛型指针)。

二、整型在内存中的存储

1、原码、反码、补码

原码,反码和补码都是整数的二进制表示方法,这三种方法均有符号位和数值位两部分,符号为用“0”表示“正”,用“1”表示“负”,而数值位中正数的原、反、补相同,负数的三种表示方法:

反码是原码的符号位不变,其他位按位取反,补码是反码+1。对于整型数据来说,数据的存放中其实存放的是补码。(原因:使用补码,可以将符号位和数值域统一处理,同时加法和减法也可以统一处理,CPU中只有加法器,此外,运算过程中是相同的,不需要额外的硬件电路。

在内存中的存储:

 从图片中我们可以看到a和b分别存储的是补码,但在顺序上与我们计算得到的编码又有些不同。

char的取值范围是-128~127、unsigned char的取值范围是0~255;

short的取值范围是-32768~32767、unsigned char的取值范围是0~65535

2、大小端介绍

(1)什么是大端小端

大端存储模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中

小端存储模式:是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中

(如果内存从左到右为低地址到高地址,则大端是顺序存储,小端是倒序存储)

(2)为什么有大端和小端

在计算机系统中是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short,32bit的long,另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,则必然存在着一个如何将多个字节安排的问题。

//判断当前机器大端小端的方法
int check_sys()
{
	int a = 1;
	return *(char*)&a;
}
int main()
{
	int ret = check_sys();
	if (ret == 1)
		printf("小端\n");
	else
		printf("大端\n");
	return 0;
}

三、浮点数在内存中的存储

1、浮点数的存储规则

根据国际标准IEEE754,任意一个二进制浮点数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。按照上面的形式,则S=0,M=1.010,E=2。

IEEE 754规定:

对于32位的浮点数,最高的1位是符号位S,接着的8位是指数E,剩下的23位是有效数字M。

对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位是有效数字M。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值