Предположим, что число 'numb'=1025 [00000000 00000000 00000100 00000001]
представлено следующим образом:
На маленькой конечной машине:
00000001 00000100 00000000 00000000
На Big-Endian Machine:
00000000 00000000 00000100 00000001
Теперь, если я применил Left Shift на 10 бит (то есть: numb <= 10), я должен иметь:
[A] Мало-Endian Machine:
Как я заметил в GDB, Little Endian делает левый сдвиг в 3 этапа: [Я показал "3" шаги, чтобы лучше понять обработку)
-
Относитесь к no. в Большой Эндианской конвенции:
00000000 00000000 00000100 00000001
-
Применить Left-Shift:
00000000 00010000 00000100 00000000
-
Представьте результат снова в Little-Endian:
00000000 00000100 00010000 00000000
[В]. На машине Big-Endian:
00000000 00010000 00000100 00000000
Мой вопрос:
Если я применил только левый сдвиг на маленьком конце Конвенции, он должен дать:
numb
:
00000001 00000100 00000000 00000000
numb << 10
:
00010000 00000000 00000000 00000000
Но на самом деле он дает:
00000000 00000100 00010000 00000000
Чтобы достичь только второго результата, я показал три гипотетических шага выше.
Пожалуйста, объясните мне, почему эти два результата отличаются друг от друга: фактический результат numb << 10
отличается от ожидаемого результата.