私がこれを持っているとしましょう:
// 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 個のものを含めることは大したことではありませんが、それよりもはるかに多くする必要がある場合もあります。この制限を回避する方法はありますか? ビット演算子は非常に高速で便利です。