Скажем, у меня есть это:
// different things you can do
var CAN_EAT = 1,
CAN_SLEEP = 2,
CAN_PLAY = 4,
CAN_DANCE = 8,
CAN_SWIM = 16,
CAN_RUN = 32,
CAN_JUMP = 64,
CAN_FLY = 128,
CAN_KILL = 256,
CAN_BE_JESUS = Math.pow(2, 70);
// the permissions that I have
var MY_PERMS = CAN_EAT | CAN_SLEEP | CAN_PLAY | CAN_BE_JESUS;
// can I eat?
if(MY_PERMS & CAN_EAT) alert('You can eat!'); /* RUNS */
// can I sleep?
if(MY_PERMS & CAN_SLEEP) alert('You can sleep!'); /* RUNS */
// can I play?
if(MY_PERMS & CAN_PLAY) alert('You can play!'); /* RUNS */
// can I be jesus?
if(MY_PERMS & CAN_BE_JESUS) alert('You can be jesus!'); /* WONT RUN */
Затем, если я запущу его, он напечатает, что я могу есть, спать и играть. Он не напечатает, что я могу быть Иисусом, потому что это число 2^70. Если я сделаю число 2 ^ 31, тогда это сработает (я на 64-битной машине, но должен запускать Chrome в 32-битном режиме, когда я запускал приведенный выше пример).
Я постоянно сталкиваюсь с этой проблемой в PHP, когда имею дело с побитовыми операторами. Часто я могу работать со сценарием, в котором я нахожусь, поэтому наличие максимум 31 или 63 вещей в моем списке не имеет большого значения, но иногда мне нужно иметь гораздо больше. Есть ли способ обойти это ограничение? Побитовые операторы такие быстрые и удобные.