大小端模式总结

大端:所谓的大端存储,即低地址存放高位数据,高地址存放低位数据。
小端:所谓的小端存储,即低地址存放低位数据,高地址存放高位数据。

对于一个数据0x12345678,对应大小端存储方式如下:

小端存储方式
0x00    |78|
0x01    |56|    
0x02    |34|
0x03    |12|

大端存储方式
0x00    |12|
0x01    |34|    
0x02    |56|
0x03    |78|


注:
一个字节地址空间占8个位(bit),而一个十六进制数据位占4位(bit),
所以一个内存地址可以存两个十六进制数据位。

 

如何判断一个编译器的大小端存储方式?

原理:利用联合体union的特性,联合体中的数据共享存储空间,给一个整型数据a赋值1,其存储在一个字节的内存中,而从内存空间中取值时,默认从低地址到高地址依次取数据,而我们将一个char类型(1个字节)返回,若编译器是大端存储,则1存储在最高地址处,我们取出的值会是0;相反,若是小端存储,则1存储在最低地址处,而我们取一个char类型数据时,则会把1取出来,最后,用一个if语句判断一个就知道编译器的存储方式了。

代码如下:

#include
using namespace std;

bool CheckModle()
{
	union
	{
		char ch; //1个字节
		int a;	 //4个字节
	}un;
	un.a = 1;
	return un.ch == 1;
}

int main()
{
	bool flag = CheckModle();
	if(flag)   //若flag是1,则是小端存储,否则是大端存储
	{
		cout << "This is Little Model,"<< endl;
	}
	else
	{
		cout << "This is Big Model,"<< endl;
	}
	
	return 0;
}

 

你可能感兴趣的:(简历知识点,秋招复习总结,C语言随记,C++学习笔记,C学习中的困惑,大小端)