我在想这两件事时遇到了麻烦。我知道如何用高字节顺序来表示一些东西。
例如-12是1111 1111 1111 0100
但为什么小端表示法是1111 0100 1111 1111而不是0100 1111 1111 1111?
发布于 2014-02-26 10:52:50
字节顺序与字节地址顺序有关。小端意味着低位有效字节获得低位地址。Big endian的意思正好相反。所以它是关于字节(8位块),而不是半字节(4位块)。我们使用的大多数计算机(有几个例外)在单个地址级别上使用地址字节。
以-12为例:
内存中的小端字节序应该是:
000000: F4
000001: FF在内存中,Big endian将是:
000000: FF
000001: F4发布于 2014-02-26 10:47:20
小端基本上颠倒了多字节值的字节顺序
1111 1111 1111 0100是一个2字节值,其中1111 1111是第一个字节,1111 0100是第二个字节。在小端中,首先读取第二个字节(或最低有效字节),因此最终表示为1111 0100 1111 1111
发布于 2018-08-26 00:53:38
big-endian的目的是从左到右在计算机屏幕上打印十六进制,以便低级或新手程序员更容易阅读;换句话说,因为十六进制从低内存地址打印到高内存地址,所以除非您在软件中对其进行更改,否则十六进制将被翻转。Little-endian的目的不是让字节按顺序排列,这样就不会为开发人员做额外的工作,而是让在软件中关心字节翻转的人非常有限()!
强烈建议永远不要使用大端。现在的CPU是双字节序的,既可以处理大字节序,也可以处理小字节序,所以除非您与遗留硬件交互,否则几乎整个行业都使用小字节序,而大字节序已经被开发人员计划完全停止使用。
无软件格式化的低字节顺序
In RAM Printed
+----+ 0x01000000
0x4 | 00 |
| 00 |
| 00 |
0x0 | 01 |
+----+无软件格式化的Big-Endian
In RAM Printed
+----+ 0x00000010
0x4 | 01 |
| 00 |
| 00 |
0x0 | 00 |
+----+使用软件格式化的Little-Endian
In RAM Printed
+----+ 0x00000010
0x4 | 00 |
| 00 |
| 00 |
0x0 | 01 |
+----+字节序的起源
单词Endian实际上是北美的一个古老的土著部落。我不记得故事是怎么发展的,所以请发表评论来填补漏洞,但故事是有两个恩迪亚部落为了一些愚蠢的事情而进行了家族争执,并最终解释了为什么他们之间的不和已经消失很久了,但他们仍然在战斗,只是因为他们仍然很生气。
这是香蕉!
术语“香蕉”指的是一种著名的unscientific study alleged to have been done with monkeys。“科学家”在一间有一群猴子的房间里放了一架梯子,并把香蕉放在梯子的顶端。如果任何一只猴子试图爬上梯子,刻薄的科学家们就会向所有的猴子喷水。这些猴子学会了痛打任何试图爬上梯子的猴子,以避免被喷雾。最终,科学家们停止了对猴子的喷雾,但猴子继续痛打任何试图爬上梯子的人。这个故事的有趣之处在于someone just made it up。这就是当某些事情完全是愚蠢的时候的意思,比如打击毒品的战争。
诚然,如果你用消防水龙喷洒猴子,这个故事很有可能是真的,因为最初的故事没有造成足够的痛苦来克服猴子对香蕉的喜爱,但它看起来好像真正的科学家并不那么刻薄。
为了确切了解banans big-endian是如何实现的,让我们看一下Big-endian的起源。回到微处理器的黎明,当他们还在手工制作面具和机器时,摩托罗拉公司曾短暂地发现,当时使用大端字节序更快。当时摩托罗拉的CPU速度是最快的,他们发展出了一个根深蒂固的大牌阵营。不久之后,当他们缩小集成电路的尺寸时,这种性能提升变得无关紧要,现代CPU现在是双字节序的,并且可以在启动时改变字节序。这将与香蕉的故事一模一样。有人误解了一些东西,它在不知道自己在做什么的人中变得流行起来,现在的逻辑是完全疯狂的! #DeleteBigEndian
https://stackoverflow.com/questions/22030657
复制相似问题