C++

还分不清“大端”和“小端”?


avatar
GuoYulong 2024-11-26 123

在工程中,我们时常可以听到“大端存储”“小端存储”这类字眼,所以这个“大”和“小”到底指的是什么呢?

首先我们先来讨论一下字在机器中的存储,首先我们约定一个字是32位,半字是16位,字节是8位(对应int short char)。如果一台机器是字节可寻址的,那么能够单独寻址的最低精度就是字节。如果是字可寻址的,那么能够单独寻址的最低精度就是字。

因此,一个字在内存中看起来是这样的:

每个字里面有4个字节。(MSB指最高有效字节(most signifcant byte);LSB指最低有效字节(least signifcant byte))。例如,我们在程序中有一个整数变量为 0x11223344,那么它在内存中看起来是这样的:

然而,字节可寻址的机器中存在着一个有趣的问题,就是一个字中各个字节排列的顺序。在字节可寻址的机器中,一个4字节的字,如果从地址100开始,那么这个字其实占据了内存中100、101、102、103这4个连续字节

这4个字节组合起来就成了地址100处的一个字

假设100处的这个字的值为0x11223344,那么这4个字节在字中有两种可能的组织方式:
组织方式1:

在这种组织方式中,该字的MSB(包含11)位于字的地址即100上。这种组织方式称为大端模式

组织方式2:

在这种组织方式中,该字的LSB(包含44)位于字的地址即100上,这种组织方式称为小端模式

由此可见,大端还是小端是根据哪个字节处于字的地址上来区分的,如果是MSB,那就是大端;如果是LSB,那就是小端

相关阅读

注意!!!

新增会员中心页面,方便管理个人账户,充值功能暂不开启,请勿为本网站进行任何充值活动!!!

通知!!!

① 过年好!!!拖更几个月了已经,年后继续更新!!