广东企业备案 网站建设方案书,口碑好的移动网站建设,wordpress关键字,wordpress编辑富文为什么存储的顺序有些变动呢#xff1f;
大小端的介绍
我们在创建变量时#xff0c;操作系统就会给你分配空间#xff0c;比如你创建了【short/int/double/float】的变量#xff0c;这些变量的类型都是大于1个字节的#xff0c;操作系统会根据你这个变量的类型#xff…
为什么存储的顺序有些变动呢
大小端的介绍
我们在创建变量时操作系统就会给你分配空间比如你创建了【short/int/double/float】的变量这些变量的类型都是大于1个字节的操作系统会根据你这个变量的类型分配相应的内存空间在空间分配好之后在这块内存中进行存储这个变量反正内存已经分好了所以在这个内存中如何存储就不关操作系统的事情了。那么这个变量在它内存存储中是从低地址到高地址呢还是从高地址到低地址呢
在一块给定的内存中其实在内存中存储的时候其实顺序是可以任意的。只要以你的方式存储进去关键的是在你需要使用数据的时候以你的方式原样返回即可。 简而言之怎么存储其实并不重要重要的是你能够存进去并且取出来即可。 如下图假设int a 0x11223344其实下面的这类种存储方式都是可以的但是因为像类似下面这两个存储方式在读取的时候是极其不方便的所以这之后的C语言发展的过程中就将类似于下面的存储方式就不再继续使用了最后就采用了这两种存储方式一种是正着存储一种是倒着存储。 这里这就分为了两种存储方式大端字节序存储和小端字节序存储。
大端字节序存储
大端字节序存储就是将一个数据的低位字节处的数据存储到内存中高位字节的存储数据将这个数据的高位字节处的数据存储到内存中低位字节的存储数据。
小端字节序存储
小端字节序存储就是将一个数据的高位字节处的数据存储到内存中高位字节的存储数据将这个数据的低位字节处的数据存储到内存中低位字节的存储数据。 而这里注意在数据类型为char时就不需要考虑存储顺序的问题因为char类型的数据只占1个字节。
只有所占的字节数大于1字节的时候比如short、int、double、float、long long等我们才考虑存储顺序的问题。
那么为什么会出现大小端字节序的存储问题呢
因为在计算机系统中我们是以字节为单位的每个地址单元都对应着一个字节一字节为8比特位。但是在C语言中除了有8比特位的char还有16比特位的short32比特位的long具体需要根据编译器。另外对于16位、32位的处理器由于寄存器是大于一个字节的那么必然就会存在着如何将一个多字节存储安排的问题这便导致了会有大小端字节序存储之分。
在学习完了大小端字节序存储之后这里有一道关于它的笔试题
百度在2015年系统工程师的笔试题
请简述大端字节序存储和小端字节序存储的概念并设计出一个程序来判断当前机器的字节序。
思路
假如我们存储了int a0那么a的16进制就是0x 00 00 00 01。在这个数据中01方向的是低位数数据00方向的是高位数数据。那么在这种情况下存储1假设是小端字节序存储高位数数据存储到高地址中那么就是01存储到了高地址中那么只要验证出低地址中取出的数等于1的话那么就可以说明它就是小端字节序存储。如图 代码
#include stdio.h
int main()
{int a 1;char* p (char*)a;//利用char类型1字节来判断存储在低地址种的一字节的数据是何值if (*p 1){printf(小端);}else{printf(大端);}return 0;
}