我正在使用按位运算来表示一个整数内的许多访问控制标志。
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)