【发布时间】:2012-04-08 01:06:04
【问题描述】:
说我有这个:
// 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 位机器上,但在运行上述示例时必须在 32 位模式下运行 Chrome)。
在处理位运算符时,我在 PHP 中也一直面临这个问题。通常我可以按照我所处的场景来完成它,所以我的列表中最多有 31 或 63 件事情并不是什么大不了的事,但有时我需要的远不止这些。有没有办法绕过这个限制?按位运算符非常快速和方便。
【问题讨论】:
-
语言?你说,“PHP...也是。”
-
抱歉,上面的例子是 JavaScript。
标签: javascript architecture bitwise-operators bitwise-and bitwise-or