64位值的Endian表示

时间:2014-01-31 11:16:27

标签: c 32bit-64bit endianness

假设我有unsigned long long x = 0x0123456789ABCDEF

以下哪项是正确的? (我只能验证第一个):

  • 在32位小端处理器上,它将以67 45 23 01 EF CD AB 89的形式显示在内存中。
  • 在64位小端处理器上,它将以EF CD AB 89 67 45 23 01的形式显示在内存中。
  • 在32位大端处理器上,它将以01 23 45 67 89 AB CD EF的形式显示在内存中。
  • 在64位大端处理器上,它将以01 23 45 67 89 AB CD EF的形式显示在内存中。

3 个答案:

答案 0 :(得分:10)

第一个是错的。在ia32上,至少布局为EF CD AB 89 67 45 23 01

其他人都是正确的。

答案 1 :(得分:4)

小端表示最低有效位在第一个字节中,大端表示最低有效位在最后一个字节中:

0x0123456789ABCDEF大端是0x01,0x23,0x45 ......

0x0123456789ABCDEF小端是0xEF,0xCD,0xAB ......

处理器的原生单词endianess和size是无关紧要的;记忆中的表象由端点决定。

答案 2 :(得分:1)

我认为32位解决方案非常适合编译器。它可以选择代表这种类型,只要它的大小是预期的,它就会以任何方式都缺乏原生支持。

64位我认为是正确的。