Computer science 为什么同时使用little-endian和big-endian?

Computer science 为什么同时使用little-endian和big-endian?,computer-science,endianness,Computer Science,Endianness,为什么经过了大约40年的二进制计算机科学之后,现在仍然使用little-endian和big-endian?是否存在一种算法或存储格式对其中一种工作得更好,而对另一种工作得更差?如果我们都换成一个并坚持下去,不是更好吗?大端和小端都有各自的优点和缺点。即使有一个明显的优越性(事实并非如此),任何遗留体系结构都不可能切换Endian,因此我担心您必须学会适应它。小Endian使类型转换更容易。例如,如果您有一个16位的数字,您可以简单地将相同的内存地址视为指向8位数字的指针,因为它包含最低的8位。

为什么经过了大约40年的二进制计算机科学之后,现在仍然使用little-endian和big-endian?是否存在一种算法或存储格式对其中一种工作得更好,而对另一种工作得更差?如果我们都换成一个并坚持下去,不是更好吗?

大端和小端都有各自的优点和缺点。即使有一个明显的优越性(事实并非如此),任何遗留体系结构都不可能切换Endian,因此我担心您必须学会适应它。

小Endian使类型转换更容易。例如,如果您有一个16位的数字,您可以简单地将相同的内存地址视为指向8位数字的指针,因为它包含最低的8位。因此,您不需要知道正在处理的确切数据类型(尽管在大多数情况下您确实知道)

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

然而,在很多很多抽象层的时代,这些参数实际上不再重要了。我认为我们两个都有的主要原因是没有人愿意转换。这两种系统都没有明显的原因,所以如果旧系统运行良好,为什么要进行任何更改呢?

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

在拥有16位寄存器但有8位数据总线的Intel 8088上,小端指令允许此类指令在第一个内存周期后开始运行。(当然,一个单词的内存提取应该可以按降序而不是递增的顺序进行,但我怀疑这会使设计稍微复杂一些。)

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

另一方面,大端数字可以从MSB开始进行比较(尽管许多比较指令实际上执行减法运算,但无论如何都需要从LSB开始)。符号位也很容易获得

是否有算法或存储 使用一个或多个选项可以更好地工作的格式 另一个更糟

没有。这里和那里都有小的优势,但没有什么大的优势

事实上,我认为litte endian更自然、更一致:bit的意义是 2^(位位置+8*字节位置)。而对于big-endian,bit的意义是 2^(位位置+8*(字大小-字节位置-1))

如果我们都换成一个并坚持下去不是更好吗


由于x86的主导地位,我们肯定会被小端点所吸引。许多移动设备中的ARM芯片具有可配置的端性,但通常设置为LE以与x86世界更兼容。这对我来说很好。

我正在寻找通用或特定的示例。little-endian(通常,但并不总是)对自滚bignum实现有用(即,使用大于机器字大小的整数)。我并不真正理解您的类型转换注释。在little-endian系统中,最低有效位位于内存中的第一位。因此,您可以将此内存指针视为8位值(您将获得8个最低有效位)、16位值等。您将始终按照预期顺序获得正确的位数。在big-endian系统中,您将获得最重要的位,这不是您在将较大的数据类型类型类型转换为较小的数据类型时所期望的。类型转换通常在寄存器中完成,但是-否则您不能对extend等进行签名-除了重新解释转换,在这种情况下您是对的,但是在某些big-endian机器上,指针指向一个单词的最后一个字节,而不是第一个字节,这只会加深所有的混淆。只有当你缩小数据类型时,小的endian类型转换技巧才真正起作用,例如,将短字符转换为字符。对于加宽,如果强制转换为有符号类型,显然需要额外的存储和符号扩展。我认为他的意思是检索内存。无论数字有多大或多小,CPU都不必移动到它在内存中的位置。如果它位于寄存器或缓存中的CPU上,CPU将必须检索它,此时它可以重用上次使用的内存地址。但是,如果它是big-endian,则必须调整上次使用的内存地址。在这两种系统中,都必须再次检索CPU上的数据。(无论数据在哪里,缩短在CPU上都有同样的优势)。你刚刚从我嘴里偷走了这些话。:)。谢谢如果我们不是从闪族语言中得到数字的话,我们也会是little endian。哇,我从来都不知道每个字节的位也是从最低到最高有效的。所以10=0x0A实际上存储为
01010000
,而不是二进制00001010?Kuro是最小的可寻址单位是字节,所以实际上考虑如何排列这些位是完全任意的。位在字节中的“存储”方式完全取决于您希望遵循的约定。如果你把你选择的惯例写在纸上,你确实会把值10写为01010000(小写)和00001010(大写)。