что значит старший и младший байт

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

Порядок байтов

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

Содержание

Варианты записи

Порядок от старшего к младшему

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

Порядок байтов от старшего к младшему применяется во многих форматах файлов — например, PNG, FLV, EBML.

Порядок от младшего к старшему

В противоположность порядку «от старшего к младшему» (англ. big-endian, «тупоконечный»), соглашение little-endian поддерживают меньше кросс-платформенных протоколов и форматов данных; существенные исключения: USB, конфигурация PCI, таблица разделов GUID, рекомендации FidoNet.

Переключаемый порядок

Многие процессоры могут работать и в порядке от младшего к старшему, и в обратном, например, ARM, PowerPC (но не PowerPC 970), DEC Alpha, MIPS, PA-RISC и IA-64. Обычно порядок байтов выбирается программно во время инициализации операционной системы, но может быть выбран и аппаратно перемычками на материнской плате. В этом случае правильнее говорить о порядке байтов операционной системы. Переключаемый порядок байтов иногда называют англ. bi-endian.

Смешанный порядок

Смешанный порядок байтов (англ. middle-endian) иногда используется при работе с числами, длина которых превышает машинное слово. Число представляется последовательностью машинных слов, которые записываются в формате, естественном для данной архитектуры, но сами слова следуют в обратном порядке.

Классический пример middle-endian — представление 4-байтных целых чисел на 16-битных процессорах семейства PDP-11 (известен как PDP-endian). Для представления двухбайтных значений (слов) использовался порядок little-endian, но 4-хбайтное двойное слово записывалось от старшего слова к младшему.

В процессорах VAX и ARM используется смешанное представление для длинных вещественных чисел.

Пример

Далее приведён пример, в котором описывается размещение 4-байтового числа в ОЗУ ЭВМ, доступ к которому может производиться и как к 32-разрядному слову, и побайтно.

Все числа записаны в 16-ричной системе счисления.

Число: 0xA1B2C3D4

ПредставлениеD4*0x01 + C3*0x100 + B2*0x10000 + A1*0x1000000
Порядок от младшего к старшему(little-endian)0xD4, 0xC3, 0xB2, 0xA1
Порядок от старшего к младшему(big-endian)0xA1, 0xB2, 0xC3, 0xD4
Порядок, принятый в PDP-11(PDP-endian)0xB2, 0xA1, 0xD4, 0xC3

Сравнение

что значит старший и младший байт. Смотреть фото что значит старший и младший байт. Смотреть картинку что значит старший и младший байт. Картинка про что значит старший и младший байт. Фото что значит старший и младший байт

Существенным достоинством little-endian по сравнению с big-endian порядком записи считается возможность «неявной типизации» целых чисел при чтении меньшего объёма байт (при условии, что читаемое число помещается в диапазон). Так, если в ячейке памяти содержится число 0x00000022, то прочитав его как int16 (два байта) мы получим число 0x0022, прочитав один байт — число 0x22. Однако, это же может считаться и недостатком, потому что провоцирует ошибки потери данных.

Обратно, считается что у little-endian, по сравнению с big-endian есть «неочевидность» значения байтов памяти при отладке (последовательность байтов (A1, B2, C3, D4) на самом деле значит 0xD4C3B2A1, для big-endian эта последовательность (A1, B2, C3, D4) читалась бы «естественным» для арабской записи чисел образом: 0xA1B2C3D4). Наименее удобным в работе считается middle-endian формат записи; он сохранился только на старых платформах.

Для записи длинных чисел (чисел, длина которых существенно превышает разрядность машины) обычно предпочтительнее порядок слов в числе little-endian (поскольку арифметические операции над длинными числами производятся от младших разрядов к старшим). Порядок байтов в слове — обычный для данной архитектуры.

Определение порядка байтов

Порядок байтов в конкретной машине можно определить с помощью программы на языке Си (testbyteorder.c):

Результаты запуска на big-endian машине (SPARC):

Результаты запуска на little-endian машине (x86):

Вещественные числа

Хранение вещественных чисел может зависеть от порядка байт; так, на x86 используются форматы IEEE 754 со знаком и порядком числа в старших байтах.

Юникод

Если Юникод записан в виде UTF-16 или UTF-32, то порядок байтов является существенным. Одним из способов обозначения порядка байтов в юникодовых текстах является постановка в начале специального символа BOM (byte order mark, маркер последовательности байтов, U+FEFF) — «перевёрнутый» вариант этого символа (U+FFFE) не существует и не допускается в текстах.

Символ U+FEFF изображается в UTF-16 последовательностью байтов 0xFE 0xFF (big-endian) или 0xFF 0xFE (little-endian), а в UTF-32 — последовательностью 0x00 0x00 0xFE 0xFF (big-endian) или 0xFF 0xFE 0x00 0x00 (little-endian).

Проблемы совместимости и конвертация

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

В случае совпадения текущего порядка байтов и сетевого, функции могут быть «пустыми» (то есть, не менять порядка байтов). Стандарт также допускает, чтобы эти функции были реализованы макросами.

Существует много языков и библиотек со средствами конвертации в оба основных порядка байт и обратно.

Ядро Linux: le16_to_cpu(), cpu_to_be32(), cpu_to_le16p(), и так далее;

Ядро FreeBSD: htobe16(), le32toh(), и так далее;

Источник

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

СОДЕРЖАНИЕ

Пример

что значит старший и младший байт. Смотреть фото что значит старший и младший байт. Смотреть картинку что значит старший и младший байт. Картинка про что значит старший и младший байт. Фото что значит старший и младший байт

что значит старший и младший байт. Смотреть фото что значит старший и младший байт. Смотреть картинку что значит старший и младший байт. Картинка про что значит старший и младший байт. Фото что значит старший и младший байт

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

Этимология

Дэнни Коэн ввел в информатику термины с прямым порядком байтов и прямым порядком байтов для упорядочения данных в заметке об эксперименте в Интернете, опубликованной в 1980 году.

Основы

Еще одним важным атрибутом байта, являющегося частью «поля», является его «значение». Эти атрибуты частей поля играют важную роль в последовательности доступа к байтам аппаратным обеспечением компьютера, точнее: низкоуровневыми алгоритмами, влияющими на результаты компьютерной инструкции.

Числа

Текст

Аппаратное обеспечение

История

Motorola 6800 / +6801, в 6809 и серии 68000 процессоров использовал тупоконечник формата.

До версии 9 SPARC исторически использовал обратный порядок байтов, который является двунаправленным ; аналогично ранние процессоры IBM POWER были с прямым порядком байтов, но потомки PowerPC и Power ISA теперь имеют обратный порядок байтов. Архитектура ARM была с прямым порядком байтов до версии 3, когда она стала двунаправленной.

Текущие архитектуры

Двусторонний порядок байтов

Многие из этих архитектур можно переключить с помощью программного обеспечения на определенный по умолчанию формат с порядком байтов (обычно это делается при запуске компьютера); однако в некоторых системах порядок байтов по умолчанию выбирается аппаратно на материнской плате и не может быть изменен с помощью программного обеспечения (например, Alpha, которая работает только в режиме прямого байта на Cray T3E ).

Некоторые процессоры, такие как многие процессоры PowerPC, предназначенные для встроенного использования, и почти все процессоры SPARC позволяют выбирать порядок байтов для каждой страницы.

Процессоры SPARC с конца 1990-х годов (процессоры, совместимые с SPARC v9) позволяют выбирать порядок следования данных для каждой отдельной инструкции, загружаемой из памяти или сохраняемой в ней.

У многих процессоров есть инструкции для преобразования слова в регистре в обратный порядок байтов, то есть они меняют порядок байтов в 16-, 32- или 64-битном слове. Однако все отдельные биты не меняются местами.

Последние процессоры с архитектурой Intel x86 и x86-64 имеют инструкцию MOVBE ( Intel Core с поколения 4, после Atom ), которая извлекает слово в формате с прямым порядком байтов из памяти или записывает слово в память в формате с прямым порядком байтов. В остальном эти процессоры являются полностью прямым порядком байтов. У них также уже был ряд инструкций подкачки для изменения порядка байтов содержимого регистров, например, когда слова уже были извлечены из ячеек памяти, где они находились в «неправильном» порядке байтов.

Плавающая запятая

VAX с плавающей запятой хранит 16-битные слова с прямым порядком байтов в порядке прямого байта.

Данные переменной длины

Оптимизация

Говоря более конкретно, такая оптимизация эквивалентна следующему коду C, возвращающему true в большинстве систем с прямым порядком байтов:

Хотя это и не разрешено C ++, пробойный код такого типа разрешен как «определяемый реализацией» стандартом C11 и обычно используется в коде, взаимодействующем с оборудованием.

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

Такого рода оптимизации нельзя переносить между системами с разным порядком байтов.

Порядок расчета

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

Сравнение и деление начинаются с наиболее значимой цифры и распространяют возможный перенос на последующие менее значимые цифры. Для числовых значений фиксированной длины (обычно длины 1,2,4,8,16) реализация этих операций на машинах с прямым порядком байтов немного проще.

Многие процессоры с прямым порядком байтов (например, IBM System / 360 и его преемники) содержат аппаратные инструкции для лексикографического сравнения символьных строк различной длины.

Нормальный перенос данных с помощью оператора присваивания в принципе не зависит от порядка байтов процессора.

С прямым порядком байтов

PDP-endian

Способ интерпретации этого порядка байтов состоит в том, что 32-битное целое число хранится в виде двух 16-битных слов с прямым порядком байтов, но сами слова имеют прямой порядок байтов (например, «jag cog sin» будет «gaj goc nis»):

Хранение 32-битного целого числа 0x0A0B0C0D на PDP-11

увеличение адресов
.0B ч0A ч0D ч0C ч.
.0A0B h0C0D ч.

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

Дескрипторы сегмента Intel IA-32

Байтовая адресация

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

На машинах с прямым порядком байтов значение отображается слева направо, совпадая с правильным порядком строк для чтения результата:

увеличение адресов
.4A ч6F h68 часов6E h.
.‘J’‘о’‘час’‘п’.

Но на машине с прямым порядком байтов можно было бы увидеть:

увеличение адресов
.6E h68 часов6F h4A ч.
.‘п’‘час’‘о’‘J’.

Машины с прямым порядком байтов, такие как Honeywell 316 выше, еще больше усложняют это: 32-битное значение сохраняется в виде двух 16-битных слов ‘hn’ ‘Jo’ с прямым порядком байтов, которые сами имеют обратный порядок байтов (таким образом, ‘h’ ‘n’ ‘J’ ‘o’ ).

Обмен байтами

Файлы и файловые системы

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

Некоторые компиляторы имеют параметры для генерации кода, которые глобально разрешают преобразование для всех операций ввода-вывода файлов. Это позволяет повторно использовать код в системе с обратным порядком байтов без модификации кода.

Последовательные неформатированные файлы Fortran, созданные с одним порядком байтов, обычно не могут быть прочитаны в системе с использованием другого порядка байтов, потому что Fortran обычно реализует запись (определенную как данные, записанные одним оператором Fortran) как данные, которым предшествуют и после которых следуют поля счетчика, которые являются целыми числами, равными к количеству байтов в данных. Попытка прочитать такой файл с помощью Fortran в системе с другим порядком байтов приводит к ошибке времени выполнения, поскольку поля счетчика неверны. Этой проблемы можно избежать, записав последовательные двоичные файлы вместо последовательных неформатированных. Обратите внимание, однако, что относительно просто написать программу на другом языке (таком как C или Python ), которая анализирует последовательные неформатированные файлы Fortran с «чужим» порядком байтов и преобразует их в «родной» порядок байтов путем преобразования из «чужого» порядка байтов, когда чтение записей и данных Fortran.

Как следствие своей первоначальной реализации на платформе Intel 8080 файловая система таблицы размещения файлов (FAT), не зависящая от операционной системы, определяется с прямым порядком байтов, даже на платформах, изначально использующих другой порядок байтов, что требует операций перестановки байтов для поддержания жир.

Комбинированная файловая система ZFS / OpenZFS и диспетчер логических томов, как известно, обеспечивают адаптивный порядок байтов и работают как с прямым, так и с прямым порядком байтов.

В Беркли Sockets API определяет набор функций для преобразования 16-битные и 32-битных чисел и из сетевого порядка байт: htons (хост-сети короткие) и htonl (хост-сеть длиной) преобразует 16- битовые и 32-битные значения соответственно от машины ( хоста ) к сетевому порядку; ntohs и ntohl функции преобразования из сети в порядке хоста. Эти функции могут быть не оп на большой обратный порядок байт системы.

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

Битовый порядок байтов

Источник

Что значит старший и младший байт

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

1.1 Двоичные числа

Чтобы сделать вычислительные системы более надежными и простыми, их аппаратура строится из простейших электронных схем, которые могут находиться только в двух состояниях. Одно из них обозначается 0, а другое – 1. Такая схема предназначена для длительного или краткого хранения самой мелкой единицы информации – бита (от «BInary digiT» – двоичная цифра).

Любое число можно представить в виде цепочки битов. Такое представление числа называется двоичным числом. Цепочка из восьми битов называется байтом (рис. 1).

что значит старший и младший байт. Смотреть фото что значит старший и младший байт. Смотреть картинку что значит старший и младший байт. Картинка про что значит старший и младший байт. Фото что значит старший и младший байт что значит старший и младший байт. Смотреть фото что значит старший и младший байт. Смотреть картинку что значит старший и младший байт. Картинка про что значит старший и младший байт. Фото что значит старший и младший байт

старший бит (бит 7) младший бит (бит 0)

Рис. 1. Пример байта

Величина двоичного числа определяется относительной позицией каждого бита и его значением. Позиционный вес младшего бита 2 о = 1(10), где 1(10) – единица в десятичной системе счисления. Следующий бит имеет вес 2 1 = 2(10). Вес любой позиции получается удвоением веса предыдущей позиции (рис. 2).

что значит старший и младший байт. Смотреть фото что значит старший и младший байт. Смотреть картинку что значит старший и младший байт. Картинка про что значит старший и младший байт. Фото что значит старший и младший байт

Рис. 2. Веса позиций байта

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

что значит старший и младший байт. Смотреть фото что значит старший и младший байт. Смотреть картинку что значит старший и младший байт. Картинка про что значит старший и младший байт. Фото что значит старший и младший байт

Записывая 0 в остальные позиции битов (биты 0,2,3) получаем окончательный результат: 110010.

Для выполнения обратного преобразования следует сложить десятичные веса тех позиций, в которых стоит 1:

32 (бит 5) + 16 (бит 4) + 2 (бит 1) = 50

Байт может представлять десятичные положительные числа от 0 (00000000) до 255 (11111111). Число 255 может быть получено двумя способами: 1) суммированием весов всех битов байта; 2) по формуле 2 8 – 1, где 8 – номер первого бита, не вошедшего в состав байта.

Машинным словом будем называть битовую строку длиной 16 битов. Одно слово содержит 2 байта (рис. 3). Каждый бит слова имеет свой вес. Просуммировав все веса, найдем максимальное целое число без знака, которое можно записать в одно слово, оно равно 2 16 – 1 = 65535.

Двоичное содержимое байта или слова может рассматриваться (интерпретироваться) как число без знака и как число со знаком. Число без знака занимает все 16 битов слова или 8 битов байта. Оно может быть только положительным. Просуммируем два таких числа:

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

что значит старший и младший байт. Смотреть фото что значит старший и младший байт. Смотреть картинку что значит старший и младший байт. Картинка про что значит старший и младший байт. Фото что значит старший и младший байт

Рис. 3. Веса позиций слова

все биты числа (в том числе и знаковый) инвертируются;

к полученному числу прибавляется 1.

Например, получим дополнительный код числа –65:

Для получения абсолютного значения отрицательного числа повторяют эти же самые два действия. Например:

Сумма +65 и –65 должна составить ноль:

В данном примере у нас произошли два интересных переноса: 1) в знаковый (7-й) разряд; 2) за пределы байта. Первая единица переноса обрабатывается как обычно, а вторая теряется. Оба переноса считаются правильными.

Отсюда видно, что нулевые биты в отрицательном двоичном числе фактически определяют его величину: рассмотрите весовые значения нулевых битов так, как если бы это были единичные биты, сложите эти значения и прибавьте 1.

Источник

Русские Блоги

Бит, байт, слово, возможность адресации, метод кодирования, обратный порядок байтов от младшего к старшему

1. Связанные с машиной / системой

1. Таблица названий

8 бит (бит, бит) = 2 байта (байт) = 1 слово (WORD) [«слово», произносимое шиной, зависит от системы]

Кроме того, есть двойное слово DWORD, четыре слова QWORD

2. Адресация и длина слова

3. Метод кодирования (причина искаженных символов)

2. Практика: языковая программа C.

1. Тип хранилища

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

В разных системах длина байтов, занимаемых этими типами, различна:
Шесть ключевых слов short, int, long, char, float, double представляют шесть основных типов данных в языке C.

В 32-битной системе
Размер памяти, занимаемой char, составляет 1 байт.
Размер памяти, занимаемой short, составляет 2 байта;
Размер памяти, занимаемой int, составляет 4 байта;
Размер памяти, занимаемой float, составляет 4 байта;
Размер памяти, занимаемой double, составляет 8 байт;
Размер памяти, занимаемой long int, составляет 4 байта;
* Вы можете использовать ключевое слово sizeof () языка C, чтобы получить количество байтов, занятых в данный момент.
что значит старший и младший байт. Смотреть фото что значит старший и младший байт. Смотреть картинку что значит старший и младший байт. Картинка про что значит старший и младший байт. Фото что значит старший и младший байт

Среди них integer int, float с плавающей запятой, беззнаковый беззнаковый
Хотя длина байта такая же, метод хранения и метод чтения также другой.
Подробности см. в другом моем блоге:Вывод на языке C 0.000000 или искажен, зайдите в него

2. Порядок байтов с прямым порядком байтов, обратный порядок байтов

Режим Big Endian означает, что старший байт данных хранится в младшем адресе памяти, а младший байт данных сохраняется в старшем адресе памяти. Этот режим хранения немного похож на обработку данных как строки. Обработка: адрес увеличивается от маленького к большему, а данные размещаются от большего к меньшему; это соответствует нашим привычкам чтения.

Режим Little Endian означает, что старший байт данных хранится в старшем адресе памяти, а младший байт данных сохраняется в младшем адресе памяти. Этот режим хранения эффективно объединяет старший и младший адреса адреса с битовой массой данных. Верхняя часть адреса имеет больший вес, а часть меньшего адреса имеет меньший вес.

3. Слова разных систем / машин / компиляторов занимают разные байты.

Шина обычно предназначена для передачи фрагмента данных фиксированного размера. Этот фрагмент данных называется словом. Количество байтов, содержащихся в слове (то есть размер слова), является основным параметром в различных компьютерных системах, и этот параметр находится в Обычно в разных системах он разный. В большинстве современных компьютерных систем слово состоит из 4 или 8 байтов.
Отсюда видно, чтоНет смысла просто спрашивать, сколько байтов занимает слово, потому что размер слова зависит от ширины шины конкретной системы.Если это 32-разрядная система (X86), слово составляет 4 байта, а если это 64-разрядная система (X64), это 8 байтов.

4. Битовый конец (битовое поле), битовая операция, структура

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

3. Масштабные единицы (префикс Международной системы единиц)

Международная система единиц (СИ) между разными порядками величины:
1KB=1024B;1MB=1024KB=1024×1024B。
Стандарт буквенных символов Международной электротехнической комиссии для электрических технологий IEC 60027-2 IEC 80000-13
Хранение данных выражается в десятичной системе, а передача данных выражается в двоичной системе, поэтому 1 КБ не равен 1000 Байт.
1B (байт, байт) = 8 бит (см. ниже);
1 КБ (килобайт, килобайт) = 1024 Б = 2 ^ 10 Б;
1 МБ (мегабайт, мегабайт, мегабайт, для краткости «мегабайт») = 1024 КБ = 2 ^ 20 Б;
1 ГБ (гигабайт, гигабайт, миллиард байт, также известный как «гигабайт») = 1024 МБ = 2 ^ 30 Б;
1 ТБ (терабайт, триллион байт, терабайт) = 1024 ГБ = 2 ^ 40 Б;
1 ПБ (петабайт, петабайт, петабайт) = 1024 ТБ = 2 ^ 50 Б;
1EB (эксабайт, эксабайт, эксабайт) = 1024 ПБ = 2 ^ 60 Б;
1ZB (зеттабайт, десять триллионов байт, зеттабайт) = 1024EB = 2 ^ 70 Б;
1YB (Yottabyte, 100 миллионов миллиардов байт, байты Yao) = 1024ZB = 2 ^ 80 B;
1 ББ (бронтобайт, сто миллиардов миллиардов байт) = 1024YB = 2 ^ 90 Б;
1NB (NonaByte, один триллион триллионов байт) = 1024BB = 2 ^ 100 B;
1 дБ (DoggaByte, миллиард миллиардов миллиардов байт) = 1024 NB = 2 ^ 110 B;

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *