Может ли endianness ссылаться на порядок бит в байте? - программирование
Подтвердить что ты не робот

Может ли endianness ссылаться на порядок бит в байте?

Я читаю "Learning Core Audio: практическое руководство по аудиопрограмме для Mac и iOS" Криса Адамсона и в какой-то момент автор описывает big-endian как:

старшие бит байта или слова численно более значительны, чем нижние.

Однако до сих пор, хотя проблема с большим маленьким endian применяется только к порядку байта, а не порядку бит. Один байт имеет тот же порядок бит (слева направо), независимо от того, говорим ли мы о маленьких системах конца или больших эндиан. Я ошибаюсь? Неправильно ли автор? Или я неправильно понял его точку зрения?

4b9b3361

Ответ 1

Поскольку вы обычно не можете адресовать биты в байте в отдельности, в принципе не существует понятия "bit endianness".

Ответ 2

Единственный смысл, в котором существует такая вещь, как "порядок бит", - это порядок, в котором биты присваиваются битовым полям. Например, в:

union {
    struct {
        unsigned char a:4;
        unsigned char b:4;
    } bf;
    unsigned char c;
};

в зависимости от реализации, представление bf.a может занимать высокие четыре бита c или низкие четыре бита c. Независимо от того, соответствует ли упорядочение элементов битового поля порядку байтов, определяется ли реализация.

Ответ 3

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

Аудио

С точки зрения релевантности потоковой передачи аудио, это может быть очень важно. Аппаратное обеспечение, которое отвечает за преобразование потока цифрового звука в аналоговые аудиосигналы, может ожидать, что бит в потоке будет в определенном порядке. Если они ошибаются, звук может получиться полностью взломанным. Может быть, автор этой книги подробно остановился на этом? Во всяком случае, как я упоминал ранее, это обычно принято на аппаратном уровне и на самом деле не вызывает беспокойства при программировании на уровне пользователя или даже на уровне ядра. Как правило, отраслевые стандарты будут определять, как две части оборудования будут передавать данные друг другу. Пока все ваше оборудование соглашается на бит-сущность, все в порядке.

Дальнейшее чтение в Википедии.

Ответ 4

Порядок бит внутри байта не имеет смысла, биты внутри байта не адресуются, поэтому вы не можете определить порядок этих битов, чтобы использовать его в качестве ссылки для определения endianness. В отличие от битов, байты адресуются, поэтому существует порядок адресов, который мы можем использовать в качестве ссылки для определения того, что означает мало или большое значение endian.

У вас может сложиться впечатление, что операторы бит-бит Left shift << или Right Shift >> косвенно подразумевают, что в байте определен определенный порядок бит, но это не так. Эти два термина основаны на абстрактном представлении байтов, где младший бит находится справа, а бит становится выше по значению при движении влево, но по определению Left shift имеет тот же эффект, что и умножение на 2, а Right shift имеет тот же эффект, что и деление на 2 (для целых чисел без знака).