Little Endian vs Big Endian?

时间:2014-02-26 02:42:51

标签: endianness

我在两个人身上缠着麻烦。我理解如何用big endian表示一些东西。

例如-12是1111 1111 1111 0100

但为什么小端表示1111 0100 1111 1111而不是0100 1111 1111 1111?

3 个答案:

答案 0 :(得分:16)

Endianness是关于字节地址顺序。小端表示较低有效字节获得较低地址。 Big endian意味着相反的方式。所以它是关于字节(8位块)而不是半字节(4位块)。我们使用的大多数计算机(有一些例外)在单个地址级别处理字节。

采用-12示例:

小记忆,在记忆中,将是:

000000: F4
000001: FF

大端,在记忆中,将是:

000000: FF
000001: F4

答案 1 :(得分:10)

Little endian基本上颠倒了多字节值的字节顺序

1111 1111 1111 0100是2个字节,其中1111 1111是第一个字节,1111 0100是第二个字节。在little endian中,首先读取第二个字节(或最低有效字节),因此最终表示为1111 0100 1111 1111

答案 2 :(得分:1)

big-endian的目的是在计算机屏幕上从左到右打印十六进制,以便低级或新手程序员更容易阅读它们;换句话说,由于十六进制从低内存地址打印到高地址,因此除非您在软件中进行更改,否则十六进制会翻转。 Little-endian的目的不是要成为一个疯子,而是要按顺序保留字节,这样您就不必为开发人员做额外的工作,而要设置 VERY limited 关心的人在软件中翻来覆去!

强烈建议,永远不要使用big-endian。当今的CPU是双字节序的,并且可以处理大字节序和小字节序,因此,除非您与旧硬件进行接口连接,否则几乎整个行业都使用低字节序,并且大字节序已计划由开发人员完全停用。

没有软件格式的小尾数法

    In RAM      Printed
    +----+     0x01000000
0x4 | 00 |
    | 00 |
    | 00 |
0x0 | 01 |
    +----+

没有软件格式的大尾数法

    In RAM      Printed
    +----+     0x00000010
0x4 | 01 |
    | 00 |
    | 00 |
0x0 | 00 |
    +----+

具有软件格式的Little-Endian

    In RAM      Printed
    +----+     0x00000010
0x4 | 00 |
    | 00 |
    | 00 |
0x0 | 01 |
    +----+

Endian的来源

Endian一词实际上是北美的一个古老的土著部落。我记不清故事的发展了,所以请发表评论以填补漏洞,但故事是,Endians的两个部落因某项愚蠢的事情而发生了家庭争执,最终是他们长期争执的原因,但他们仍然因为生气而还在战斗。

这是香蕉!

香蕉一词是指著名的unscientific study alleged to have been done with monkeys。 “科学家”把梯子放在一堆有猴子的房间里,把香蕉放在梯子的顶部。如果有任何一只猴子试图爬上梯子,那么科学家将为所有的猴子洒水。猴子学会了殴打试图爬上梯子的任何猴子,以免自己被喷雾。最终,科学家停止了对猴子的喷雾,但是猴子继续殴打任何试图爬上梯子的人。这个故事的有趣之处在于someone just made it up。这就是当某种完全是香蕉的东西,例如反毒品战争。

诚然,如果您用消防水喷洒猴子,故事很有可能是真实的,因为原始故事并没有给猴子带来足够的痛苦以克服猴子对香蕉的热爱,但它似乎在暗示着真正的科学家不是那样卑鄙的。

要确切地了解大端字节数的香蕉,让我们看一下大端字节的起源。早在微处理器仍在手工制作口罩和机器的微处理器时代起,摩托罗拉公司便短暂地发现使用大型字节序的速度更快。当时摩托罗拉的CPU速度最快,他们建立了根深蒂固的Big-Endianers阵营。当他们减小集成电路的尺寸后不久,这种性能提升就变得无关紧要了,现在的现代CPU是双字节序的,并且可以在启动时更改字节序。这将完全反映香蕉的故事。有人误解了一些东西,它在不知道自己在做什么的人中变得很流行,现在的逻辑是完全香蕉! #DeleteBigEndian