Поразрядные операторы обрабатывают свои операнды как последовательность из 32 бит (нулей и единиц), а не как десятичные, шестнадцатеричные или восьмеричные числа. - developer.mozilla.org
Мне кажется, что разработчик не беспокоится о побитовых операторах. Они остались одни!
В большинстве случаев они не используются, потому что некоторые считают, что все разработчики их недостаточно хорошо знают, и путают их с логическими эквивалентами. Например, предположим, что вы работаете над большим проектом и использовали что-то вроде (a и b), очень велика вероятность, что во время проверки кода кто-то скажет, что вы пропустили «&», и это должно было быть «(a && b) »
Это своего рода причина, по которой их оставляют в покое. И им плохо, у них тоже есть чувства, знаете ли!

Так что, если они будут рассматривать любое число как последовательность из 32 бит, их предубеждение делает их очень быстрыми: P Серьезно !!!
Числа в JavaScript хранятся в 64-битном формате IEEE-754. Для побитовых операций они преобразуются в 32-битное представление со знаком.
Несмотря на это преобразование, предполагается, что побитовые операции выполняются очень быстро.
Прежде чем мы перейдем к побитовым операциям, давайте посмотрим, как увидеть число в двоичном формате?
Метод Number.prototype.toString принимает систему счисления (необязательно), которая представляет собой целое число от 2 до 36, определяющее основу, используемую для представления числовых значений.
Мы можем использовать метод toString (2). Обратите внимание, что мы передаем аргумент 2, что в основном означает возвращаемую строку в двоичном формате.
//See number in binary var a = 2; a.toString(2); //this returns string "111"
базовое описание операций следующее:

Поэтому я решил, что давайте проверим это сам. Часто можно увидеть стиль изменения строк для таблиц, где мы даем отдельный стиль для нечетных / четных.
Единственная разница в приведенном ниже коде - вместо «i% 2», я изменил его на «i & 1».
//row alternating example
//Normal way
function usualWay() {
var evenUsual = 0;
var oddUsual = 0;
for (var i=0, len=10000000; i < len; i++) {
if (i % 2) {
//"odd"
oddUsual++;
} else {
//"even";
evenUsual++;
}
}
}
function bitWay() {
var evenBit = 0;
var oddBit = 0;
for (var i=0, len=10000000; i < len; i++) {
if (i & 1) {
//"odd"
oddBit++;
} else {
//"even"
evenBit++;
}
}
}
usualWay();
bitWay();
Результатом этого было побитовое выполнение - намного быстрее для очень больших входных данных (итераций), но по мере того, как количество итераций уменьшалось, разница была очень небольшой, и это заставляет вас думать, стоит ли оно того?

Лично я бы не стал использовать его, если не выполняю эту операцию тысячи раз. Поскольку некоторые операции не очень интуитивно понятны для чтения и обслуживания.
Где еще я могу их использовать?
- Битовые поля (флаги)
Это наиболее эффективный способ представления чего-либо, состояние которого определяется несколькими свойствами «да или нет». ACL - хороший пример; Если у вас есть, скажем, 4 дискретных разрешения (чтение, запись, выполнение, изменение политики), лучше сохранить их в 1 байте, а не тратить 4. Для дополнительного удобства они могут быть сопоставлены с типами перечисления на многих языках. - Сжатие, шифрование
Оба они сильно зависят от побитовых алгоритмов. Взгляните на алгоритм deflate для примера - все в битах, а не в байтах. Посмотрите на реализацию nodeca в github - Графика Здесь едва ли хватит места, чтобы разобраться во всех областях, где эти операторы используются в графическом программировании. Функции Javascript для быстрого преобразования цвета в двоичный / шестнадцатеричный / RGB-код с помощью побитовых операций. Https://gist.github.com/lrvick/2080648
- Бит / байтовый алгоритм сортировки, когда пространство ограничено. Использование битов (или байтов) вместо типов, которые занимают больше памяти, таких как строки, объекты или что-то еще, позволяет нам более эффективно искать, сортировать и хранить данные. Представьте себе битовую / байтовую структуру данных по сравнению с традиционной в отношении сортировки целых чисел, байтовый массив позволил бы нам реализовать Bucket Sort с небольшим потреблением памяти.
Bucket sort works as follows: 1. Set up an array of initially empty “buckets”. 2. Scatter: Go over the original array, putting each object in its bucket. 3. Sort each non-empty bucket. 4. Gather: Visit the buckets in order and put all elements back into the original array.
Это только несколько примеров, которые я добавил сюда, я попытался предоставить ссылку на исходный источник, где это возможно. Пожалуйста, поделись своими мыслями :)