大端存储和小端存储_计算机存储的大端法和小端法

2106fced504aeeb361ec200e82d0d29a.png

01
引言

在计算机内存中,通常是以字节(Byte),也就是 8 个位(Bit)为基本存储单元(也有以 16 位为基本存储单元的)。对于跨越多个字节的数据类型(比如 int 长 4 个字节),如何在内存中对这些字节进行排序有两种常见的方法:大端法(Big-endian)和小端法(Little-endian)

c6575f16d0ede9e76d8151e7a9c62d6d.png

【注】首先不管是大端法还是小端法存储,计算机在内存中存放数据的顺序都是从低地址到高地址,所不同的是首先取低字节的数据存放在低地址还是取高字节数据存放在低地址。

比如说:0x12345 为了方便理解从左到右,字节从高到底

在内存里面是这样存储的:低位存在低地址,所以是小端存储

f610256a3b5842d1df8454ef0b2e75d2.png

02
基本概念

高位放在低地址就是大端法

低位放在低地址就是小端法

例如0x0A0B0C0D的在大端和小端中的存放方式分别为:

48109e0dcebe806a860e759d671e1d9c.png

585f8075bbe9a8b00ea227f06633353b.png

程序验证

利用C里的联合类型

#include<stdio.h>

03
注意

字节序还是位序
大端法和小端法指的是字节在内存中存储时的排列规则,而不是数据中的位的排列规则。也有以位序排列的机器,但很少见。另外,再次明确一下,大端法或小端法是数据在存储时的表现,而不是在寄存器中参与运算时的表现。

浮点数的字节序
在所有机器上,浮点数在存储时的字节顺序是和整数的字节顺序一样的,所以在进行网络传输时,可以把浮点数当作整数进行字节序转换。但在历史上,曾经有段时间因为 IEEE 并没有规定浮点数在网络上传送的标准,所以浮点数都是以大端法进行存储的。

04
结语

大多数Inter兼容机只用小端法,Android和IOS也只用小端法;IBM和Oracle的大多数机器用大端法,但它们的制造的个人电脑使用的是Inter兼容的处理器,因此使用小端法。

令人吃惊的是,对于哪种字节顺序更合适这个问题,人们表现的非常情绪化,从它的名字来源就可看出

【“端”的起源】

术语“little endian(小端)”和“big endian(大端)”出自Jonathan Swift的《格列佛游记》一书,其中两个派别交战的原因仅仅因为一方认为要从较大的一端敲开鸡蛋,而另一方认为要从小的一端敲开鸡蛋。

在作者的那个年代,Swift是借此讽刺英国和法国之间的持续冲突(难道命名者也是借此讽刺大端法和小端法的矛盾,,,只是臆想,蒟蒻什么也没说)

其实做为一个学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C/C++基础交流583650410,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。

9d478dbc8860356446f27bcb38deb30b.png

3ebd59e823e73fda0c873d140ba2e08e.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值