Вычисление младшего значащего бита в режимах little endian и big endian

Вычисление младшего значащего бита в режимах little endian и big endian

Из того, что я исследовал, следует, что Little Endian хранит младший значащий байт в наименьшем адресе памяти, тогда как Big Endian хранит старший значащий байт в наименьшем адресе памяти.

Однако я не понимаю, как подсчитывать и сравнивать значимые байты.

Например, отсюдасайтна рисунке ниже показано, как 4 байта, 90, AB, 12, CD, хранятся в адресах памяти в формате Little Endian.

Маленький эндиан

Как мне сравнить, какой байт больше среди 4? Я сначала преобразовал все в шестнадцатеричные значения, а затем сравнил на основе их десятичных значений, но, похоже, это не работает таким образом.

205 > 18, однако CD хранится в наименьшем адресе памяти... так что... я ошибаюсь.

Любые разъяснения приветствуются.

Treating CD as a hex value, with a decimal value of 205.
Treating 12 as a hex value, with a decimal value of 18.
Treating AB as a hex value, with a decimal value of 171.
Treating 90 as a hex value, with a decimal value of 144.

решение1

Я думаю, что веб-страница, на которую вы ссылаетесь, содержит очень запутанное описание порядка байтов!

Фактическое значение отдельных байтов в слове не имеет никакого отношения к тому, где они хранятся в памяти, а имеет значение только их положение как части целого 4-байтового слова.

Порядок байтов применяется только к многобайтовым словам. В вашем случае у вас есть 4-байтовое слово, как показано ниже:

Decimal      Hex           Binary
2427130573   90 AB 12 CD   10010000 10101011 00010010 11001101

Это представление с обратным порядком байтов, в котором старший байт ( 0x90) хранится первым в памяти или по самому младшему адресу памяти.

В представлении с прямым порядком байтов байты просто переставляются в памяти следующим образом:

Decimal      Hex           Binary
2427130573   CD 12 AB 90   11001101 00010010 10101011 10010000

Теперь младший байт ( 0xCD) сохраняется первым в памяти или по самому младшему адресу памяти.

Вы видите, что фактические значения задействованных байтов определяют не их местоположение в памяти, а только их положение во всем слове.

Концепция порядка байтов восходит к архитектуре ЦП, как описано в статье, на которую вы ссылаетесь, и у обоих методов есть свои преимущества и недостатки.

Самый естественный способ для людей думать о числах — это в терминах big-endianness, потому что именно так мы относимся к десятичным числам. В вашем случае 2427130573можно сказать, что десятичное число записано в big-endian нотации, то есть самая значимая цифра ( 2) записывается первой, а значимость уменьшается по мере продвижения вправо (то есть изменение значения самой левой цифры имеет наибольшее значение для значения числа). Число может быть записано как слева направо, так и 3750317242с наименее значимой цифрой первой, если вы знаете, как его читать таким образом (EDIT: кстати, именно поэтому файлы unicode должны иметь Byte Order Mark (BOM), хранящуюся в первых 2 байтах файла, чтобы операционная система знала, как интерпретировать файл.)

Однако для компьютеров, чтобы выполнять вычисления, часто наиболее эффективно хранить наименее значимый байт первым. Я думаю, что аргументы в пользу big vs little endianness являются темой другого обсуждения, и для этого есть много источников в сети!

Надеюсь, это поможет хоть немного прояснить ситуацию!

Связанный контент