Почему используются как младшие, так и старшие порядковые числа? - PullRequest
44 голосов
/ 21 января 2011

Почему используются как младшие, так и старшие порядковые числа сегодня после ~ 40 лет бинарной информатики? Существуют ли алгоритмы или форматы хранения, которые лучше работают с одним и намного хуже с другим? Разве не было бы лучше, если бы мы все переключились на один и придерживались его?

Ответы [ 3 ]

31 голосов
/ 21 января 2011

При добавлении двух чисел (на бумаге или в машине) вы начинаете с наименее значащих цифр и переходите к наиболее значимым цифрам.(То же самое относится и ко многим другим операциям).

На Intel 8088, в которой были 16-разрядные регистры, но 8-разрядная шина данных, так как они с прямым порядком байтов позволяли таким инструкциям начинать работу после первого цикла памяти.(Конечно, должно быть возможным, чтобы выборки слова выполнялись в порядке убывания, а не увеличения, но я подозреваю, что это немного усложнило бы конструкцию.)

На большинстве процессоров ширина шины соответствуетширина регистра, так что это больше не дает преимущества.

С другой стороны, числа с прямым порядком байтов можно сравнивать, начиная с MSB (хотя многие инструкции сравнения фактически вычитают, что в любом случае нужно начинать с LSB).Знаковый бит также очень легко получить.

Существуют ли алгоритмы или форматы хранения, которые лучше работают с одним и намного хуже с другим?

Нет.Тут и там есть небольшие преимущества, но ничего особенного.

На самом деле я считаю, что litte-endian более естественен и последовательн: значение бита равно 2 ^ (bit_pos + 8 * byte_pos).Тогда как при значении с прямым порядком байтов значение бита равно 2 ^ (bit_pos + 8 * (word_size - byte_pos - 1)).

Не было бы лучше, если бы мы все переключились на единицу и придерживалисьс этим?

Из-за доминирования x86, мы определенно стремились к порядку байтов.Чипы ARM во многих мобильных устройствах имеют настраиваемый порядок байтов, но часто они устанавливаются на LE, чтобы быть более совместимыми с миром x86.Что меня устраивает.

14 голосов
/ 21 января 2011

Little Endian упрощает типовые трансляции. Например, если у вас есть 16-разрядное число, вы можете просто использовать тот же адрес памяти, что и указатель на 8-разрядное число, так как оно содержит младшие 8 бит. Таким образом, вам не нужно знать точный тип данных, с которыми вы имеете дело (хотя в большинстве случаев вы все равно знаете).

Big Endian немного более читабелен. Биты хранятся в памяти в том виде, в котором они отображаются в логическом порядке (сначала наиболее значимые значения), как и в любой используемой человеком системе счисления.

Во многих, многих слоях абстракции эти аргументы больше не учитываются. Я думаю, что главная причина того, что у нас все еще есть то, что никто не хочет переключаться. Нет очевидных причин для любой из этих систем, так зачем что-то менять, если ваша старая система работает отлично?

3 голосов
/ 21 января 2011

Как с прямым, так и с обратным порядком байтов имеют свои преимущества и недостатки. Даже если кто-то явно превосходит (а это не так), нет никакой возможности, чтобы любая устаревшая архитектура могла когда-либо переключать порядок байтов, поэтому я боюсь, что вам просто придется научиться жить с этим.

...