判断电脑是大端还是小端?【两种方法详解大小数据】

小端:低地址存小数据

大端:低地址存大数据

大小数据:例如十六进制0X3456,靠左的是大数据,即34是大数据。靠右的是小数据,即56是小数据。

原因:例如十进制110,左边的1代表百位,第二个1代表十位,显然大小一目了然。

例如:

判断电脑是大端还是小端?【两种方法详解大小数据】_第1张图片

 

第一种直接判断:

        

int main()
{
	short a = 1;
	int b = *(char*)(&a);       //见下详解               
	if (b == 0)
	{
		printf("大端!");
	}
	else
		printf("小端!");
	return 0;
}

int b = *(char*)(&a);  这一段代码的意思是:

判断电脑是大端还是小端?【两种方法详解大小数据】_第2张图片

 红色框的地址是整个a的地址,而蓝色框圈出来的地址,是将a的地址截取前一个字节(8位)的地址。加上前面的解引用,即可知b的值为截取的前一个字节地址所指向的值。

按上图数据b的值为前一个字节所指向的值即为0,此种情况是大数据在前,若是这种存储则为大端。即小地址存了大数据

第二种使用共用体判断

int main()
{
	union A
	{
		short a;
		char  b;
	}q;
	q.a = 1;
	if (q.b == 1)
	{
		printf("小端!");

	}
	else
		printf("大端!");
	return 0;
}

共用体两个变量共用一段内存空间,a是short类型占两个字节,b是char类型占一个字节。

当给b赋值为1(0X0001)时,若存储方式为00 01时,a的值为0,为大端;若存储方式为01 00,a的值为1,为小端。

你可能感兴趣的:(#力扣牛客刷题,c++,数据结构,开发语言)