Случаи применения побитовых операторов, которые мы здесь разберём, составляют порядка 99% всех использований в JavaScript.
Маска
Для этого примера представим, что наш скрипт работает с пользователями:
- Гость — читатель сайта.
- Петя — редактор сайта.
- Админ — администратор сайта.
У каждого из них есть ряд доступов, которые можно свести в таблицу:
| Пользователь
| Просмотр статей
| Изменение статей
| Просмотр товаров
| Изменение товаров
| Общее администрирование
|
| Гость
| Да
| Нет
| Да
| Нет
| Нет
|
| Петя
| Да
| Да
| Да
| Да
| Нет
|
| Админ
| Да
| Да
| Да
| Да
| Да
|
Если вместо «Да» поставить 1, а вместо «Нет» — 0, то каждый набор доступов описывается числом:
| Пользователь
| Просмотр статей
| Изменение статей
| Просмотр товаров
| Изменение товаров
| Общее администрирование
| В десятичной системе
|
| Гость
|
|
|
|
|
| = 20
|
| Петя
|
|
|
|
|
| = 30
|
| Админ
|
|
|
|
|
| = 31
|
Мы «упаковали» много информации в одно число. Это экономит память. Но, кроме этого, по нему очень легко проверить, имеет ли посетитель заданную комбинацию доступов.
Для этого посмотрим, как в 2-ной системе представляется каждый доступ в отдельности.
- Доступ, соответствующий только общему администрированию: 00001 (=1) (все нули кроме 1 на позиции, соответствующей этому доступу).
- Доступ, соответствующий только изменению товаров: 00010 (=2).
- Доступ, соответствующий только просмотру товаров: 00100 (=4).
- Доступ, соответствующий только изменению статей: 01000 (=8).
- Доступ, соответствующий только просмотру статей: 10000 (=16).
Например, просматривать и изменять статьи позволит доступ access = 11000: