許可「位」我正與使用以下的許可方案的系統工作:Effeciently發現在數量
1 - 權限甲
2 - 權限乙
4 - 權限Ç
8 - 權限d
16 - 權限Ë
用戶的權限被存儲爲權限值的總和。例如,如果用戶具有權限B,C和D,則14是存儲的號碼。 (2 + 4 + 8)
是否有一種快速方法來確定用戶是否具有權限D,該權限不涉及權限字符串的完整擴展? (取2的冪直到大於存儲的數字,減去該功率,直到達到目標數字)
許可「位」我正與使用以下的許可方案的系統工作:Effeciently發現在數量
1 - 權限甲
2 - 權限乙
4 - 權限Ç
8 - 權限d
16 - 權限Ë
用戶的權限被存儲爲權限值的總和。例如,如果用戶具有權限B,C和D,則14是存儲的號碼。 (2 + 4 + 8)
是否有一種快速方法來確定用戶是否具有權限D,該權限不涉及權限字符串的完整擴展? (取2的冪直到大於存儲的數字,減去該功率,直到達到目標數字)
http://php.net/manual/en/language.operators.bitwise.php
$has_D = $perms & 8;
或
$has_Nth_perm = $perms & (1 << ($n-1));
或
function has_nth_perm($perms, $n) {
return $perms & (1 << ($n-1));
}
,最快的方式是做位運算:
$D_PERMISSION = 0x08
if($permission & $D_PERMISSION) { do_stuff(); }
//////////////////////////////////////////////////////////////////////////
// LONGINT_DEC2BIN
// 64-bit manipulation safe even on 32-bit systems
// $dec_str is a DECIMAL integer or a string of decimal digits
// returns binary looking string with 0's and 1's
//////////////////////////////////////////////////////////////////////////
function longint_Dec2Bin($dec_str) {
if(longint_is_32()) {
$dec_str .= ''; // convert to string if not already
$bin_str='';
while($dec_str!='0') {
$bin_str .= chr(48 + ($dec_str{strlen($dec_str)-1}%2));
if(function_exists('BCDiv')) {
$dec_str = BCDiv($dec_str,'2');
} elseif(function_exists('gmp_div_q')) {
$dec_str = gmp_strval(gmp_div_q($dec_str,'2'));
} else {
die("This PHP installation lacks both BCMath and GMP. 32-bit environments like this require one or the other.");
}
}
$bin_str=strrev($bin_str);
return(($bin_str!='')?$bin_str:'0');
} else {
return decbin($dec_str);
}
}
我以爲有這樣的事情我可以做,但我不明白如何將這些應用於我的特定問題。 OMG! – Jeffrey