Битовые операции рассматривают свои операнды как 32-битные целые значения (последовательность 0 и 1), а не как 10-ричные, 16-ричные или 8-ричные числа. Например, десятеричное 9 имеет бинарное представление 1001. Битовые операции выполняются над такими двоичными представлениями, но возвращают стандартные числовые значения JavaScript.
В таблице приведены битовые операции JavaScript.
Таблица 3.4 Битовые операции
Операция
| Использование
| Описание
|
И
| a & b | Возвращает 1 в позиции каждого бита, где соответствующий бит обоих операндов равен 1.
|
ИЛИ
| a | b | Возвращает 1 в позиции каждого бита, где соответствующий бит одного или обоих операндов равен 1.
|
Исключающее ИЛИ/XOR
| a ^ b | Возвращает 1 в позиции каждого бита, где соответствующий бит одного, но не обоих, операндов равен 1.
|
НЕ
| ~ a | Инвертирует биты операнда.
|
Сдвиг влево
| a << b | Сдвигает операнд a в бинарном представлении на b битов влево, заполняя справа нулями.
|
Сдвиг вправо с сохранением знака
| a >> b | Сдвигает операнд a в бинарном представлении на b битов вправо, отбрасывая смещённые биты.
|
Сдвиг вправо с заполнением нулями
| a >>> b | Сдвигает операнд a в бинарном представлении на b битов вправо, отбрасывая смещённые биты и заполняя слева нулями.
|
Битовые логические операции
Концептуально битовые логические операции работают так:
· Операнды конвертируются в 32-битные целые и выражаются серией битов (нулей и единиц).
· Каждый бит первого операнда образует пару с соответствующим битом второго операнда: первый бит с первым, второй со вторым и т.д.
· Операция применяется к каждой паре битов, и результат конструируется побитно.
Например, цифра 9 имеет двоичное/бинарное представление 1001, а цифра 15 - 1111. Поэтому результаты применения битовых операций к этим значениям будут такими:
· 15 & 9 даст 9 (1111 & 1001 = 1001)
· 15 | 9 даст 15 (1111 | 1001 = 1111)
· 15 ^ 9 даст 6 (1111 ^ 1001 = 0110)
Битовые операции сдвига
Операции битового сдвига принимают два операнда: первый это сдвигаемое число, а второй специфицирует количество битовых позиций, на которое сдвигается первый операнд. Направление сдвига контролируется самой операцией.
Операции сдвига конвертируют свои операнды в 32-битные целые числа и возвращают результат того же типа, что и у левого операнда.
Операции сдвига перечислены в следующей таблице.
Таблица 3.5 Операции битового сдвига
Операция
| Описание
| Пример
|
<< (Сдвиг влево)
| Эта операция сдвигает влево первый операнд на специфицированное вторым операндом количество битов. Излишние биты, сдвинутые влево, отбрасываются. Справа идёт заполнение нулями.
| 9<<2 даёт 36, поскольку 1001, сдвинутое на 2 бита влево, становится 100100, что равно 36.
|
>> (Сдвиг вправо с сохранением знака)
| Эта операция сдвигает вправо первый операнд на специфицированное вторым операндом количество битов. Излишние биты, сдвинутые вправо, отбрасываются. Копии левых битов вставляются слева.
| 9>>2 даёт 2, поскольку 1001, сдвинутое на 2 бита вправо, становится 10, что равно 2. Аналогично -9>>2 даёт -3, поскольку знак сохраняется.
|
>>> (Сдвиг вправо с заполнением нулями)
| Эта операция сдвигает вправо первый операнд на специфицированное вторым операндом количество битов. Излишние биты, сдвинутые вправо, отбрасываются. Слева идёт заполнение нулями.
| 19>>>2 даёт 4, поскольку 10011, сдвинутое на 2 бита вправо, становится 100, то есть 4. Для неотрицательных чисел сдвиг вправо с заполнением нулями и сдвиг вправо с сохранением знака дают одинаковые результаты.
|