Бит-сдвиг зависит от порядка байтов?

Я выполнил следующий тест в Firefox 45 и хотел поделиться:

setTimeout(function(){window.focus()}, 2000);

a) Alt-tab в другое окно приведет к желаемому окну на лицевой панели после 2 секунд.

b) Сведение к минимуму окна приведет к его восстановлению и перенесению на передний план после 2 секунд.

c) Изменение вкладок не позволит фокусу повторного усиления табуляции.

d) Изменение вкладок а затем Alt-tab в другое окно не будет выводить первое окно на передний план.

140
задан Kerrek SB 1 January 2016 в 21:41
поделиться

1 ответ

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

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

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

, Например, предположите, что у нас есть строка кода как это

0x1F & 0xEF

, Как Вы вычислили бы результат вручную на бумаге?

  MSB   0001 1111  LSB
        1110 1111
result: 0000 1111

, Таким образом, здесь мы используем формат С обратным порядком байтов, чтобы сделать вычисление. Можно также использовать Прямой порядок байтов, чтобы вычислить и получить тот же результат.

Btw, когда мы пишем числа в коде, я думаю, что он похож на формат С обратным порядком байтов. 123456 или 0x1F, старшие значащие числа запускаются слева.

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

Поэтому назад к вопросу, об операции сдвига << нужно думать как [1 152] смещение от LSB (младший значащий байт) к MSB (старший значащий байт) .

Затем что касается примера в вопросе:

numb=1025

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

LSB 00000001 00000100 00000000 00000000 MSB

Так << 10 был бы 10bit смещение от LSB до MSB.

<час>

Сравнение и << 10 операции для формата С прямым порядком байтов шаг за шагом:

MSB                                        LSB
    00000000  00000000  00000100  00000001  numb(1025)
    00000000  00010000  00000100  00000000  << 10

LSB                                        MSB
    00000000  00000100  00010000  00000000 numb(1025) << 10, and put in a Little Endian Format

LSB                                        MSB
    00000001  00000100  00000000  00000000 numb(1205) in Little Endian format
    00000010  00001000  00000000  00000000 << 1 
    00000100  00010000  00000000  00000000 << 2 
    00001000  00100000  00000000  00000000 << 3 
    00010000  01000000  00000000  00000000 << 4
    00100000  10000000  00000000  00000000 << 5
    01000000  00000000  00000001  00000000 << 6
    10000000  00000000  00000010  00000000 << 7
    00000000  00000001  00000100  00000000 << 8
    00000000  00000010  00001000  00000000 << 9
    00000000  00000100  00010000  00000000 << 10 (check this final result!)

, Ничего себе! Я получаю ожидаемый результат как описанный OP!

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

  1. кажется, что он не смещался от LSB до MSB.

  2. При смещении битов в формате С прямым порядком байтов, необходимо понять (благодарите Бога, что я понимаю это), что:

LSB 10000000 00000000 MSB << 1
LSB 00000000 00000001 MSB, не LSB 01000000 00000000 MSB

, поскольку для каждого индивидуума 8bits, мы на самом деле пишем это в MSB 00000000 LSB формат С обратным порядком байтов.

, Таким образом, это похоже

LSB[ (MSB 10000000 LSB) (MSB 00000000 LSB) ]MSB

<час>

Для подведения:

  1. , Хотя битовые операции, как говорят, абстрагирован далеко blablablabla..., когда мы вычисляем битовые операции вручную, мы все еще должны знать, какой порядок байтов мы используем, поскольку мы записываем двоичный формат на бумаге. Также мы должны удостовериться, что все операторы используют тот же порядок байтов.

  2. OP не добирался, ожидаемый результат состоит в том, потому что он сделал смещение неправильно.

0
ответ дан 23 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: