整型数据的存储-大小端字节序村存储详解

目录

首先为什么有大端和小端存储之分呢?

1.大小端存储字节序

2.数位的低位高位

3.高地址和低地址 

4.大小端的例子理解 

5.如何验证自己的机器是大端还是小端 


 

首先为什么有大端和小端存储之分呢?

①在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8比特,但是C语言中除了8比特的char,还有很多其他的类型

②另外对于大于8位的处理器,由于寄存器宽度大于一个字节,就必然面临着一个如何将多个字节内容安排的问题。

③数据的存储就意味着可能要使用,那么数据的存储和拿出得有一个方式。倒着存储和顺着存储只是数据存储的一个方式,区别和影响不大

1.大小端存储字节序

我们知道了整型是以二进制补码的形式放在我们的存储空间中的,我们来看看:(调试看看内存中的情况)。

 注:在Vs中,值是用16进制数展示出来的。

16进制的一个位表示四个二进制位,2个16进制位就是8个二进制位,就是一个字节。

 那么,究竟什么叫做大端字节序,什么叫做小端字节序呢?

1.首先,字节序,是一种以字节为单位,讨论存储顺序的数据排序方式。然后才是大端小端

2.小端字节序存储:把一个数据的低位字节的内容放在低地址处。高位字节内容放在高地址处。

大端字节序存储:把一个数据的低位字节的内容放在高地址处。数据的高位字节的内容放在低地址处。

要能理解这种存储方式,就需要理解几个概念,数位的高位低位以及地址的高位低位,接下来我们来看看。

2.数位的低位高位

数据的高位是数据的左边位置的数,数据的低位是数据右边位置的数,数据的高位和低位又称高字节和低字节。

我们用一个十进制数123来理解

而二进制数中也是同理

3.高地址和低地址 

对内存空间进行分配,每一字节的内存空间都有一个编号,编号较低的是低地址,编号较高的是高地址,数据的存储是从低地址开始存储的。如图:

4.大小端的例子理解 

有了上面的内容,我们看一个例子方便理解。

一个16Bit的short类型X,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节数据位,0x22为低字节数据位。

那么对于大端模式存储,就将高字节位的0x11放在低地址0x0010中,0x22就放在高地址0x0011中,小端存储方式就刚好相反。

我们常用的x86就是小端存储。

5.如何验证自己的机器是大端还是小端 

整型数据的存储-大小端字节序村存储详解_第1张图片

我们根据上面的分析写出对应代码:

整型数据的存储-大小端字节序村存储详解_第2张图片 

测试没有问题,附上源码大家体验效果

int main()
{
	
	int b = 1;
	
	if (*&b == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

 这篇文章单独对大小端存储拿出来,方便搜索精确定位,也补充了一些知识,使得称为独立章节内容更加完整。希望大家多多指正。

你可能感兴趣的:(数据结构,c语言)