最近在了解大小端模式,一直不明白为什么内存要存在两种存储数据的模式,为什么不只用我们一般好理解的小端模式(低位保存在低地址,高位保存在高地址),看了一些文章几乎都是像下面这样写的,看了还是不明白,希望高手解释解释,谢谢!
为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于 大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
------解决思路----------------------
就算先有小端,也无法阻止别人开发大端。因为幸亏一条线只有两个端,所以只有大小端。就像任天堂、playstation、X-box。就像GSM、CDMA,就像ANSI、DIN、ISO、GB、JIS,就像华为、小米、锤子……
生命会充满它能找到的所有空间。这是生物的本能。
------解决思路----------------------
就像计量单位有英制公制,汽车有左舵右舵,一开始没有统一标准,就只好双轨并用了。最开始应该是硬件实现上各有优势,所以沿用下来了
------解决思路----------------------
都是人自己想出来的 如果一开始规定好也就好了
------解决思路----------------------
芯片还是好说一点了,最讨厌的是网络数据,不知道要多花多少时间去搞这个顺序.
------解决思路----------------------
二选一,有人选 1,有人选 2 ,没有为什么
------解决思路----------------------
字节序
详解大端模式和小端模式
------解决思路----------------------
只能说, 总有人喜欢与从不同吧~
------解决思路----------------------
大小端和CPU有关系,CISC(复杂指令集)CPU一般使用小端数据格式,RISC一般使用大端数据格式
------解决思路----------------------
这就是一种约定熟成的概念,理解后自己选择使用就可以,这就像公理一样,我们要做的是应用。
------解决思路----------------------
两者有相应应用优势,作为一种规则约定俗称
------解决思路----------------------
这个问题没有为什么,既然有大端就一定会有小端啊。
------解决思路----------------------
还是比较喜欢使用小端系统,可KeilC 51却是大端的
------解决思路----------------------
与硬件处理数据的安排有关。
其实,不仅仅有这两种模式。我们的安全芯片大数模运算加速器(用于 RSA, ECC 等密码算法),采用的是双字内部大端格式,双字之间(整个的串)小端模式的所谓“内部格式”。例如,大端数据 00112233 44556677 8899AABB CCDDEEFF,内部格式就是 CCDDEEFF 8899AABB 44556677 00112233。这完全是为了加速硬件操作而设计的。
实际上,在芯片外部的数据传递过程中,大多数的标准还是规定为大端格式。即最高比特最先发送。看一下各种接口标准就知道了。