Битовые операторы в Javascript и вообще - PullRequest
2 голосов
/ 31 декабря 2011

Я работаю над парсингом некоторых двоичных файлов, у меня они открыты и в ArrayBuffer.

В конкретной файловой структуре, которую я читаю, есть ряд битов boolean, и я могу проверить, проверяются ли они с помощью:

(flag & 1) != 0; // bit 0 
(flag & 2) != 0; // bit 1 
(flag & 4) != 0; // bit 2 

и т.д.

Однако у меня возникли проблемы с получением значений битов. Они охватывают несколько битов (например, биты 4-6) и состоят из целочисленного значения от 0-7.

Как несколько битов читаются так? Я понимаю, что это не столько вопрос JavaScript, сколько вопрос о том, как работают битовые и побитовые операторы.

Ответы [ 2 ]

4 голосов
/ 31 декабря 2011

Предполагая, что вы хотите 4-6 бит от байта, как это:

76543210
 ^^^

Вы бы построили немного маску, как это:

0x70

, что означает:

01110000

А затем вы бы и это с номером и сдвигались вправо 4 раза:

( byte & 0x70 ) >> 4
//Number between 0-7
2 голосов
/ 31 декабря 2011

Предполагая, что младший значащий бит находится в позиции "0", и вам нужно 3-битное целое число между битовыми позициями 4-6.

var value = (flag >>> 4) & 0x0007;

Другими словами, сдвиг вправо "помечает" 4 битавправо, так что биты 4-6 сдвигаются в позиции 0-2.Затем замаскируйте только последние три бита (двоичный 111 = десятичный 7).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...