如果你听懂了我所讲述的内容我们离大厂offer又进了一步!!! 一.介绍 维基百科:字节顺序,又称端序或尾序(英语:Endianness),在计算机科学领域中,指电脑内存中或在数字通信链路中,组成多字节的字的字节的排列顺序
这个的意思就是数据在存储的时候字节的存储顺序不同叫做字节顺序。
二.种类 我们都知道内存的作用就是存储数据,而存储的方式在不同的操作系统上方式也是不同的所以
字节序经常被分为两类:
- Big-Endian(大端):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
2.Little-Endian(小端):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端
三. 实例讲解 我们大概了解下就好下面看实例:
首先我们了解下内存的存储方式,
栈区的习惯是:先使用高地址再使用低地址
数组的习惯:随着数组下标的增长,地址是由低到高变化的
(这里的变量a,b是存放在栈区的)
a是整型占内存的4个字节,二进制的有效位为10是低位,我们发现a再内存中是02 00 00 00存储而不是00 00 00 02,而根据我们的 低位字节排放在内存的低地址端,高位字节排放在内存的高地址端可知,此操作系统是小端存储模式
我们再看b也是06 00 00 00排列,从低地址到高地址存放由低端到高端数组的存储
四.证明 我们可以测试出它的存储模式,但是面试官让你敲出一个程序来判断是哪种存储模式我们该怎么办?
思路:我们要想判断它的类型那我们可以拿出这个数据的第一个字节(8byt)就可以判断他的类型了
我们只要得到最低的1字节的地址就可以解决问题
摸索方法:我们首先知道int存储类型是4个字节而char类型存储时1个字节,如果每次用取出int类型那会直接把这个值直接取出来而不能判断第一个字节存储的是什么,所以我们考虑将类型强转为char类型取出第一个字节来判断
我们用char指针p_a接受a强转类型的地址
int judge_str(char* p_a) { if (*p_a) { return 1; } return 0; } int main() { int a = 2; char* p_a = (char*)&a; int b=judge_str(p_a); if (b == 1) { printf("小端\n"); } else printf("大端\n"); }
这样我们就可以判断它的存储类型了
五.作用
经过统一的存储方式这样我们可以加快内存的读存取极大的加快了代码运行的效率以及安全性。