Big and Little Endian | Одноминутная серия

Java

Ярлыки: Статьи официального аккаунта


Память с точки зрения пользователя

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

image_1di3049vv1lltbflfm71dkkgqb9.png-14.1kB

Структура памяти, показанная на рисунке, состоит всего изnОн состоит из последовательных сеток, каждая сетка может хранить один байт данных (1 байт = 8 бит). Каждая сетка имеет свой уникальный номер, называемый内存地址. Так:

  • Если наш компьютер 32-разрядный, количество ячеек памяти, к которым теоретически можно получить доступ, составляет 2³² (то есть 4 ГБ), а соответствующий диапазон адресов памяти равен:0 ~ 2³² - 1.

  • Если наш компьютер 64-битный, количество ячеек памяти, к которым теоретически можно получить доступ, составляет 2⁶⁴ (это очень большое число), а соответствующий диапазон адресов памяти равен:0 ~ 2⁶⁴ - 1.

вес байта

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

00010010 00110100 01010110 01111000

двоичный байт00010010Его можно преобразовать в шестнадцатеричный0x12, двоичные байты00110100можно преобразовать в шестнадцатеричный0x34, двоичные байты01010110можно преобразовать в шестнадцатеричный0x56, двоичные байты01111000можно преобразовать в шестнадцатеричный0x78. Таким образом, целое число, преобразованное в шестнадцатеричные данные, равно:

0x12345678

в:

  • байт0x12слева, представляющий1 × 16⁷ + 2 × 16⁶,это0x12Вес байтов относительно велик.

  • байт0x34представляет собой3 × 16⁵ + 4 × 16⁴, вес этого байта равен секунде.

  • за которыми следуют байты0x56,представляет собой5 × 16³ + 6 × 16², этот байт снова учитывает вес.

  • байты в конце0x78,представляет собой7 × 16¹ + 8 × 16⁰,это0x78Вес байтов наименьший.

Типы языков высокого уровня

Обычно мы используем языки высокого уровня для программирования (отличные от машинного языка или языка ассемблера), и один из языков высокого уровня类型Понятие некоторых типов данных занимает несколько последовательных ячеек памяти. Например, есть язык в языке под названиемintтип, который должен занимать размер 4 байта. Если мы скажем, что хотим установить следующее число (шестнадцатеричное) на языке высокого уровня вintТипы:

0x12345678

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

  • Некоторые люди помещают байты высокого веса в младшие адреса, и люди называют этот способ представления многобайтовых данных.大端法:

    image_1di34u5pk1nv5k1n1fpqorbbkmm.png-24.6kB

  • Некоторые люди помещают байты с большим весом в старшие адреса, и люди называют этот способ представления многобайтовых данных.小端法:

    image_1di34v19poj12cl1tomu4395i13.png-24.6kB

Так как поначалу все плохо договорились, для многобайтовых данных на разных машинах используются разные методы представления, что сказывается на переносимости программы. Кроме того, сеть стала неотъемлемой частью современного общества, когда многобайтовые данные отправляются с машины, использующей прямой порядок байтов, на машину, использующую прямой порядок байтов, это вызывает ошибки. Поэтому дядя, который разработал сеть, предусмотрел, что когда данные передаются по сети, для передачи должен использоваться метод big-endian.Тогда для машины, использующей метод Little-Endian, потребуется много процедур, а затем перевернуть его~

Не по теме

Написание статей очень утомительно, и иногда вы чувствуете, что чтение идет очень гладко, что на самом деле является результатом бесчисленных правок за ним. Если вы думаете, что это хорошо, пожалуйста, помогите переслать его.Большое спасибо~ Вот мой публичный аккаунт "Мы все маленькие лягушки".