我使用按位运算来表示一个整数内的许多访问控制标志。在> 32位整数上使用按位运算符
ADMIN_ACCESS = 1;
EDIT_ACCOUNT_ACCESS = 2;
EDIT_ORDER_ACCESS = 4;
var myAccess = 3; // ie: (ADMIN_ACCESS | EDIT_ACCOUNT_ACCESS)
if (myAccess & EDIT_ACCOUNT_ACCESS) { // check for correct access
// allow for editing of account
}
这大部分发生在我项目的PHP端。然而,在保存某人的访问级别时,使用Javascript可以使用|
加入多个访问标志。这很好地工作到一个点。我发现一旦整数(标志)变得太大(> 32位),它就不再能够在Javascript中按位运算符正常工作。例如:
alert(4294967296 | 1); // equals 1, but should equal 4294967297
我试图找到一种解决方法,这样我就不必我访问控制标志的次数限制为32。每个接入控制标志是两次先前控制标志,使每个控制标志不会干扰其他控制标志。
dec(4) = bin(100)
dec(8) = bin(1000)
dec(16) = bin(10000)
我注意到,有一个简单的+
增加了两个这样的标志在一起时,似乎拿出了同样的答案当作位or
操作,但我有麻烦缠绕我的头左右,这是否是一个简单的替换,或者如果这样做可能会有问题。任何人都可以评论此解决方法的有效性吗?例如:
(4294967296 | 262144 | 524288) == (4294967296 + 262144 + 524288)