Предположим, у меня есть число 'numb'=1025 [00000000 00000000 00000100 00000001]
:
На машине Little-Endian:
00000001 00000100 00000000 00000000
На машине Big-Endian:
00000000 00000000 00000100 00000001
Сейчас, если я применю сдвиг влево на 10 битов (то есть: numb << = 10), у меня должно быть: </p>
[A] на машине с прямым порядком байтов:
Как я заметил в GDB,Little Endian выполняет сдвиг влево в 3 шага: [Я показал '3' шага, чтобы лучше понять только обработку]
Обработать нет.в соглашении Big-Endian:
00000000 00000000 00000100 00000001
Применить сдвиг влево:
00000000 00010000 00000100 00000000
Представить результат снова в Little-Endian:
00000000 00000100 00010000 00000000
[B].На машине с прямым порядком байтов:
00000000 00010000 00000100 00000000
Мой вопрос:
Если я непосредственно применю сдвиг влево на конвенцию Little Endian, он должен дать:
numb
:
00000001 00000100 00000000 00000000
numb << 10
:
00010000 00000000 00000000 00000000
Но на самом деле это дает:
00000000 00000100 00010000 00000000
Для достижения только второго результата, япоказали три гипотетических шага выше.
Пожалуйста, объясните мне, почему два вышеупомянутых результата отличаются: Фактический результат numb << 10
отличается от ожидаемого результата.