Во-первых, вы должны знать, что наименьшая единица данных, которой могут манипулировать почти все современные процессоры, - это 8-битный байт. Для чисел мы (люди) пишем и читаем слева направо, и сначала мы пишем самую значимую цифру, поэтому самая значимая цифра находится слева.
little-endian подразумевает две вещи для процессора:
Предположим, что ЦП извлекает из памяти 4
байтов, например, начиная с адреса 0x00
, и этот адрес 0x00
содержит байт 11111111
, равный 0xFF
, адрес 0x01
содержит байт 00111100
, равный 0x3C
, адрес 0x02
содержит байт 00011000
, равный 0x18
, а адрес 0x03
содержит байт 00000000
, равный 0x00
, тогда, когда процессор интерпретирует эти 4 байта как целое число, они будут интерпретироваться как целочисленное значение 0x00183CFF
. То есть ЦП будет считать байт с самым высоким адресом самым старшим байтом (MSB), то есть для ЦП, чем выше адрес, тем значительнее будет байт на этом адресе.
(0xFF) (0x3C) (0x18) (0x00) <-----value of each byte in hex
11111111 00111100 00011000 00000000 <-----byte at each addresse
^ ^ ^ ^
0x00 0x01 0x02 0x03 <-----addresses
То же самое, когда ЦП записывает целое значение 0x00183CFF в память. Это поместит 0xFF в самый низкий адрес и 0x00 в самый высокий адрес. И если вы (человек) интуитивно читаете байты с низких адресов на высокие, вы читаете FF 3C 18 00, что является обратным порядком записи 0x00183CFF.
Для BIG-endianness ЦП читает и записывает MSB по более низким адресам и LSB по более высоким адресам.