首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >小端vs大端?

小端vs大端?
EN

Stack Overflow用户
提问于 2014-02-26 10:42:51
回答 3查看 27.7K关注 0票数 35

我在想这两件事时遇到了麻烦。我知道如何用高字节顺序来表示一些东西。

例如-12是1111 1111 1111 0100

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-26 10:52:50

字节顺序与字节地址顺序有关。小端意味着低位有效字节获得低位地址。Big endian的意思正好相反。所以它是关于字节(8位块),而不是半字节(4位块)。我们使用的大多数计算机(有几个例外)在单个地址级别上使用地址字节。

-12为例:

内存中的小端字节序应该是:

代码语言:javascript
复制
000000: F4
000001: FF

在内存中,Big endian将是:

代码语言:javascript
复制
000000: FF
000001: F4
票数 22
EN

Stack Overflow用户

发布于 2014-02-26 10:47:20

小端基本上颠倒了多字节值的字节顺序

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

票数 19
EN

Stack Overflow用户

发布于 2018-08-26 00:53:38

big-endian的目的是从左到右在计算机屏幕上打印十六进制,以便低级或新手程序员更容易阅读;换句话说,因为十六进制从低内存地址打印到高内存地址,所以除非您在软件中对其进行更改,否则十六进制将被翻转。Little-endian的目的不是让字节按顺序排列,这样就不会为开发人员做额外的工作,而是让在软件中关心字节翻转的人非常有限()!

强烈建议永远不要使用大端。现在的CPU是双字节序的,既可以处理大字节序,也可以处理小字节序,所以除非您与遗留硬件交互,否则几乎整个行业都使用小字节序,而大字节序已经被开发人员计划完全停止使用。

无软件格式化的低字节顺序

代码语言:javascript
复制
    In RAM      Printed
    +----+     0x01000000
0x4 | 00 |
    | 00 |
    | 00 |
0x0 | 01 |
    +----+

无软件格式化的Big-Endian

代码语言:javascript
复制
    In RAM      Printed
    +----+     0x00000010
0x4 | 01 |
    | 00 |
    | 00 |
0x0 | 00 |
    +----+

使用软件格式化的Little-Endian

代码语言:javascript
复制
    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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22030657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档