大端(Big_Endian)与小端(Little_Endian)简介.docxVIP

大端(Big_Endian)与小端(Little_Endian)简介.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大端(Big Endian)与小端(Little Endian)简介 Byte Endian 是指字节在内存中的组织, 所以也称它为 Byte Ordering,或 Byte Order。 对于数据中跨越多个字节的对象, 我们必须为它建立这样的约 定: 它的地址是多少? 它的字节在内存中是如何组织的? 针对第一个问题,有这样的解释: 对于跨越多个字节的对象,一般它所占的字节都是连续的,它的地址等于它所占字节最低地址。(链表可能是个例外, 但链表的地址可看作链表头的地址)。 比如: int x , 它的地址为 0x100。 那么它占据了内存中的Ox100, 0x101, 0x102, 0x103 这四个字节(32 位系统,所以int 占用 4 个字节)。 上面只是内存字节组织的一种情况 : 多字节对象在内存中的组织有一般有两种约定。 考虑一个 W 位的整数。 它的各位表达如下:[Xw-1, Xw-2, ... , X1, X0],它的MSB (Most Significant Byte , 最高有效字节 ) 为 [Xw-1 , Xw-2, ... Xw-8]; LSB (Least Significant Byte , 最低有效字节 ) 为 [X7 , X6,..., X0]。 其余的字节位于 MSB, LSB 之间。 LSB 和MSB 谁位于内存的最低地址, 即谁代表该对象的地址? 这就引出了大端(Big Endian)与小端(Little Endian)的问题。 DEC (Digital Equipment Corporation,现在是 Compaq 公司的一部分)和Intel 的机器(X86 平台)一般采用小端。 DEC (Digital Equipment Corporation,现在是 Compaq 公司的一部 分)和Intel 的机器(X86 平台)一般采用小端。 IBM, Motorola(Power PC), Sun 的机器一般采用大端。 理器手册。当然,这不代表所有情况。有的 CPU 即能工作于小端, 又能工作于大端, 比如 ARM, Alpha,摩托罗拉的 PowerPC。 具体情形参考处 理器手册。 具体这类 CPU 是大端还是小端,应该和具体设置有关。 (如,Power PC 支持 little-endian 字节序,但在默认配置时是 big-endian 字节序) 一般来说,大部分用户的操作系统(如 windows, FreeBsd,Linux) 是Little Endian 的。少部分,如 MAC OS ,是 Big Endian 的。所以说,Little Endian 还是 Big Endian 与操作系统和芯片类型都有关系。 Linux 系统中,你可以在/usr/include/中(包括子目录)查找字符串BYTE_ORDER(或 _BYTE_ORDER, BYTE_ORDER),确定其值。BYTE_ORDER 中文称为字节序。这个值一般在endian.h 或machine/endian.h 文件中可以找到, 有时在 feature.h 中,不同的操作系统可能有所不同。 big endian 是指低地址存放最高有效字节( MSB),而little endian 则是低地址存放最低有效字节(LSB)。 用文字说明可能比较抽象,下面用图像加以说明。比如数字 0在两种不同字节序 CPU 中的存储顺序如下所示: Big Endian 低地址 高地址 ----------------------------------------- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 12 | 34 | 56 | 78 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Little Endian 低地址 高地址 ----------------------------------------- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 78 | 56 | 34 | 12 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 从上面两图可以看出,采用 big endian 方式存储数据是符合我们人类的思维习惯的. 为什么要注意字节序的问题呢?你可能这么问。当然,如果你写的程序只在单机环境下面运行,并且不和别人的程序打交道,那 么你完全可以忽略字节序的存在。但是,如果你的程序要跟别人的程 序产生交互呢?在这里我想说说两种语言。C/C++语言编写的程序里数据存储顺序是跟编译平台所在的 CPU 相关的,而 J***A 编写的程序则唯一采用 big endian 方式来存储

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档