计算机基础:小端字节序
专栏导航
上一篇:计算机基础:内存模型
回到目录
下一篇:MFC 第一章概述
本节前言
想要学习本节知识,需要具备的先修课节,如下所示。
参考课节 :计算机基础:内存模型
参考课节:计算机基础:二进制基础10,用十六进制来查数
参考课节:计算机基础:二进制基础11,十六进制的位基和位权
有可能,我这里所提供的参考课节还不够。如果真的不够,请你根据自己的情况,在专栏目录里面,寻找相应的课节,来予以学习。
本节,我们要去讲解的,是小端字节序。
一. 无符号整型数据存储
为了了解小端字节序,我们从无符号整型数据的存储开始讲起。
假定,我们想要将一个 unsigned int 类型的整数 0x10203040 存储在内存地址 0x9000 位置,则数据会如何来存储呢?
一个 unsigned int 类型的数据,占用的内存空间为 4 个字节。而内存的起始地址为 0x9000,所以,本次的数据存储,所涉及的内存地址,为 0x9000,0x9001,0x9002,0x9003 。
为了存储规定的数据,可以有两种存储方式。
方式一:
[0x9000] = 0x10,[0x9001] = 0x20,[0x9002] = 0x30,[0x9003] = 0x40 。
其中,以式子【[0x9000] = 0x10】为例,它的意思是,内存 0x9000 的位置,存储着 0x10 这个数据。
我们再来看第二种存储数据的方式。
方式二:
[0x9000] = 0x40,[0x9001] = 0x30,[0x9002] = 0x20,[0x9003] = 0x10 。
在以上两种方式里面,第一种存储方式,高位字节的数据存储在低地址,低位字节的数据存储在高地址里面。这种存储方式,叫做大端字节序,也叫做大尾数。也有可能,你会见到大端顺序这样的叫法,以及其他的叫法,你应该根据上下文,推知它指的是大端字节序。
第二种存储方式,低位字节的数据存储在低地址,高位字节的数据存储在高地址里面。这种存储方式,叫做小端字节序,也叫做小尾数。也有可能,你会见到小端顺序这样的叫法,以及其他的叫法,你应该根据上下文,推知它指的是小端字节序。
英特尔处理器,在存储数据的时候,采取的存储方式,为小端字节序。
而我们平时所用的个人电脑,多为英特尔架构的电脑,所以呢,本节的标题,为小端字节序。
二. 存储例题
在这里,我们给出两个例题,来让大家巩固对小端字节序理解。
(一)例题1
假定下方代码中,p_ushort 的值为 0x1000,给出各个数组元素的存储情况。
unsigned short p_ushort[] = {0x1020, 0x3102, 0x3042}
由于 p_ushort[0] = 0x1020,所以,[0x1000] = 0x20, [0x1001] = 0x10 。
由于 p_ushort[1] = 0x3102,所以,[0x1002] = 0x02, [0x1003] = 0x31 。
由于 p_ushort[0] = 0x3042,所以,[0x1004] = 0x42, [0x1005] = 0x30 。
综上:[0x1000] = 0x20, [0x1001] = 0x10,[0x1002] = 0x02 。
[0x1003] = 0x31,[0x1004] = 0x42, [0x1005] = 0x30 。
(二)例题2
假定下列代码中,p_uint 的值为 0x3000,给出各个元素的存储情况。
unsigned int p_uint[] = {0x10358320, 0x32410309, 0x20104090};
由于 p_int[0] = 0x10358320, 所以 [0x3000] = 0x20, [0x3001] = 0x83 。
[0x3002] = 0x35, [0x3003] = 0x10 。
由于 p_int[1] = 0x32410309, 所以 [0x3004] = 0x09, [0x3005] = 0x03 。
[0x3006] = 0x41, [0x3007] = 0x32 。
由于 p_int[2] = 0x20104090, 所以 [0x3008] = 0x90, [0x3009] = 0x40 。
[0x300A] = 0x10, [0x300B] = 0x20 。
到了这里,本节就算是讲完了。
结束语
本节的知识,其实是不难的。
希望大家能够学会本节的知识。
专栏导航
上一篇:计算机基础:内存模型
回到目录
下一篇:MFC 第一章概述