为什么使用的是小端和大端?

为什么在大约40年的二元计算机科学之后, 今天仍然在使用小端和大端? 有没有algorithm或存储格式可以更好地与另一个更好地工作? 如果我们都转向一个并坚持下去,会不会更好?

当添加两个数字(在纸上或机器上)时,您从最低有效位数开始,向最高有效位数工作。 (许多其他操作也是如此)。

在具有16位寄存器但是具有8位数据总线的Intel8088上,小端允许这样的指令在第一个存储周期之后开始操作。 (当然,一个单词的内存读取速度应该可以降低,而不是增加,但是我怀疑这会使devise复杂一点。)

在大多数处理器上,总线宽度与寄存器宽度相匹配,所以这不再具有优势。

另一方面,Big-endian数字可以从MSB开始进行比较(尽pipe许多比较指令实际上做了一个减法,无论如何都需要以LSB开始)。 标志位也很容易得到。

有没有algorithm或存储格式可以更好地与另一个更好地工作?

没有。这里和那里没有什么大的优势。

我实际上认为litte-endian更自然和一致:一个bit的意义是2 ^(bit_pos + 8 * byte_pos)。 而对于大端,一个比特的意义是2 ^(bit_pos + 8 *(word_size – byte_pos – 1))。

如果我们都转向一个并坚持下去,会不会更好?

由于x86的统治地位,我们一定会倾向于小端。 许多移动设备中的ARM芯片具有可configuration的字节序,但通常设置为LE以便与x86世界更加兼容。 这对我来说很好。

Little Endian使得types转换更容易。 例如,如果你有一个16位的数字,你可以简单地把相同的存储器地址作为一个指向8位数的指针,因为它包含最低的8位。 所以你不需要知道你正在处理的确切的数据types(尽pipe在大多数情况下你确实知道)。

Big Endian更具人性化可读性。 比特按照逻辑顺序存储在内存中(最重要的值在先),就像任何人使用的数字系统一样。

在许多抽象层的时候,这些论点实际上并不是真的。 我认为我们仍然有两个主要的原因是没有人愿意切换。 任何一个系统都没有明显的原因,为什么如果你的旧系统工作得很好,为什么还要改变呢?

大小两端都有其优点和缺点。 即使一个人显然优越(事实并非如此),任何遗留的架构都不可能改变排列顺序,所以恐怕你只能学会忍受。