我使用按位運算來表示一個整數內的許多訪問控制標誌。在> 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)