一个int类型数字占四个字节,比如数字8对应的四个字节以十六进制表示为:00 00 00 08,其中08是四个字节中的最低位字节,最左边的00是四个字节中的最高位字节。
一块内存空间,假如从左往右是低地址到高地址

所谓大端存储就是:高位字节在低地址,低位字节在高地址,也就是以下存储方式,比较符合人类的习惯

所谓小端存储就是:低位字节在低地址,高位字节在高地址,也就是以下存储方式,比较符合机器的习惯

大端小端其实各有优势,在MySQL中,MySQL用的是小端存储,InnoDB用的是大端存储,所以MySQL需要把数字从小端格式转成大端格式,注意下图中的for循环

大端存储的好处是适合比较大小,甚至不用取出完整的四个字节就能比较大小了,比如数字8和1024用大端存储,那么从低地址到高地址的字节序就是:
00 00 00 08 00 00 04 00
要比较这两个数字的大小,可以逐个按字节来进行比较,先取第一个字节,相等,取第二个字节,相等,取第三个字节,04大于00,可以直接判断出1024大于8,而不用取第四个字节了。
反之,如果采用的小端存储:
08 00 00 00 00 04 00 00
只能把完整的四个字节都取出来才能比较大小。
小端存储的好处是适合做类型转换,比如数字8采用小端存储,那么int类型和short类型对应的字节序为:
int类型的8:08 00 00 00 short类型的8:08 00
因此int类型转short类型只需要取int类型的前两个字节就可以了,后两个字节直接可以不需要了。
反之,如果采用的是大端存储:
int类型的8:00 00 00 08 short类型的8:00 08
就需要取出int类型的全部四个字节之后,才能取出最后两个字节得到short类型的值。
以上就是我对大端存储和小端存储的理解,你学到了吗?
最后,介绍一下我和我的新课,我研究过Spring、SpringBoot、Spring Cloud、RabbitMQ、Tomcat、Dubbo、Zookeeper、JVM、Linux、SpringAI、LangChain、MetaGPT、GraphRAG...等源码。
近期MySQL源码也被我拿下了,对应的《Java手写MySQL+MySQL源码解析》课程马上就要开课了,MySQL是一个程序员最应该学好的技术,是面试跳槽的必问重点,是成为架构师和技术专家必须突破的瓶颈。
同时我还有多年讲授技术源码课程的经验,知道如何由浅入深把技术难点讲清楚,既懂MySQL源码又能讲清楚的,只有我一个,学源码找周瑜就对了!
课程马上开始,目前处于预售期的最后阶段,仅剩最后10个优惠名额,抓紧机会上车吧

推荐:




