计算小端和大端的最低有效位

计算小端和大端的最低有效位

据我研究,Little Endian 将最低有效字节存储在最小的内存地址中,而 Big Endian 将最高有效字节存储在最小的内存地址中。

但是,我不明白如何计算和比较有效字节。

例如,从这个地点,下图显示了90,AB,12,CD这4个字节在Little Endian格式的内存地址中是如何存储的。

小端序

如何比较这 4 个字节中哪个字节较大?我首先将所有字节转换为十六进制值,然后根据其十进制值进行比较,但这种方法似乎不起作用。

205 > 18,但是 CD 存储在最小的内存地址中..所以..我错了。

如有任何澄清,我们将不胜感激。

Treating CD as a hex value, with a decimal value of 205.
Treating 12 as a hex value, with a decimal value of 18.
Treating AB as a hex value, with a decimal value of 171.
Treating 90 as a hex value, with a decimal value of 144.

答案1

我认为您链接到的网页包含非常令人困惑的字节顺序描述!

字中各个字节的实际值与它们在内存中的存储位置无关,只与它们作为整个 4 字节字的一部分的位置有关。

字节顺序仅适用于多字节字。在您的例子中,您有一个 4 字节字,如下所示:

Decimal      Hex           Binary
2427130573   90 AB 12 CD   10010000 10101011 00010010 11001101

这是大端表示法,其中最高有效字节(0x90)首先存储在内存中,或者存储在最低的内存地址中。

在小端表示中,字节在内存中只是简单地反转,如下所示:

Decimal      Hex           Binary
2427130573   CD 12 AB 90   11001101 00010010 10101011 10010000

现在,最低有效字节(0xCD)首先存储在内存中,或者存储在最低的内存地址中。

您会发现,所涉及的字节的实际值并不决定它们在内存中的位置,而只决定它们在整个字中的位置。

字节顺序的概念可以追溯到 CPU 架构,正如您链接的文章中所述,这两种方法都有优点和缺点。

人类思考数字的最自然方式是大端序,因为这是我们处理十进制数的方式。 在您的例子中,十进制数2427130573可以说是以大端序表示法书写的,即2首先写入最高有效位 ( ),其重要性随着向右而减小(即更改最左边数字的值对数字的值具有最大重要性)。 数字也可以从左到右书写,也可以首先写入3750317242最低有效位,只要您知道如何读取它即可(编辑:顺便说一下,这就是为什么 unicode 文件应该在文件的前 2 个字节中存储字节顺序标记 (BOM),以便操作系统知道如何解释文件。)

但是,对于计算机来说,最有效的方法是先存储最低有效字节。我认为大端字节序与小端字节序的争论是另一个讨论的主题,网上有很多这方面的资料!

我希望这有助于澄清一些问题!

相关内容