您现在的位置是:首页 >学无止境 >数据在内存中的存储网站首页学无止境

数据在内存中的存储

小李超勇的.. 2024-07-01 11:59:07
简介数据在内存中的存储

目录

一.数据类型的详细介绍 

二.大小端字节介绍及判断


一.数据类型的详细介绍 

我们都知道内置的数据类型有:

 不知道大家是否好奇它们本身类型的意义是什么呢???

我将从下面2个方面来讲解:

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

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

  •  类型的基本归类
  • 整型家族:
  •  浮点数家族:
  •  构造类型:

 而数组类型:除去变量名就是数组类型

比如:

int arr[10]        类型:int [10]

int arr[5]               类型:int [5]       

char arr[10]        类型:char [10]

这三个就是不同的类型

  • 指针类型:
  •  空类型:

 

 我们知道创建变量是需要向内存开辟空间的。空间的大小是根据类型的不同而不同

 比如,我们创建了int 类型的a和b,我们都知道int类型要分配4个字节的空间,那在计算机中是如何存储的呢??我们往下看!!

在这之前我们需要了解一些原码 反码 补码的一点知识

而补码就是在反码上+1 

我们为什么要讲这个呢???因为数据存放内存中其实存放的就是补码!!

自然我们也会有疑惑,为什么呢??

 

 我们通过调试窗口看a和b变量在内存中的存储

这时,我们就看见了在内存中a和b变量在内存中的存储是以补码的形式,但我们也有新的疑惑,是不是顺序有点问题呢???

二.大小端字节介绍及判断

这时,我们要讲到大小端,那什么是大小端呢??

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

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

为什么要有大端和小端呢??

 我们来验证一下在VS中是小端存储还是大端存储呢??

int cheak_sys()
{
	int i = 1;
	return (*(char*)&i);

}

int main()
{
	int ret = cheak_sys();
	if (ret == 1)
	{
		printf("小端
");
	}
	else
	{
		printf("大端
");
	}


	return 0;
}

 通过验证我们发现在VS中,是以小端的形式存储的,这时我们也就能理解a和b顺序为什么是倒着存储的了

  • 我们来练习一下:
  •  
    int main()
    {
    	char a = -1;
    	signed char b = -1;
    	unsigned char c = -1;
    	printf("a=%d b=%d c=%d", a, b, c);
    
    	return 0;
    }

    结果是多少呢???

  •  为什么呢???

     所以unsigned char a结果就是255

    我们来看下列代码:

    
    int main()
    {
    	char a = -128;
    	//10000000 00000000 00000000 10000000  -原码
    	//11111111 11111111 11111111 01111111 -反码
    	//11111111 11111111  11111111 10000000 -补码
    	//发生截断 10000000 
    	//整型提升后  11111111  11111111 11111111 10000000
    
    	printf("%u
    ", a);
    
    	return 0;
    }

     

     

    我们可以通过计算机来看一下

     

    我们来看最后一道例题:

    unsigned char i = 0;//0~255 
    int main()
    {
    	for (i = 0; i <= 255; i++)
    	{
    		printf("Hello World
    ");//死循环打印   因为unsigned char 范围为0~255  当i为255时,i++后会变成0  形成一个循环  所以for循环条件恒成立
    	}
    
    	return 0;
    }

    为什么会循环打印呢???我们知道unsigned char i

    的范围为0~255 又因为是无符号数,当i超过255时,会变成0

    所以满足for循环条件,一直打印

最后:希望通过这篇文章让你对无符号整数有更好的理解,我也会不定时更新,分享我的学习经历

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。