欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

php 位運(yùn)算

系統(tǒng) 2500 0

原理

在Linux文件系統(tǒng)中,一個(gè)用戶對文件或目錄所擁有的權(quán)限分為三種:”可讀”、”可寫”和”可執(zhí)行”,分別用 1 、2 和 4 來表示,它們之間可以任意組合:有“可讀”、“可寫”權(quán)限就用 3 來表示(1 + 2 = 3);有”可讀“、”可執(zhí)行“權(quán)限就用5來表示(1 + 4 = 5),三種權(quán)限全部擁有就用 7 表示(1 + 2 + 4 = 7)。

?

實(shí)際上,這種運(yùn)算是基于二進(jìn)制的。假設(shè)可執(zhí)行、可寫、可讀三種權(quán)限分別對應(yīng)三個(gè)狀態(tài)位,如果用戶具有某種權(quán)限,那么將對應(yīng)的狀態(tài)位標(biāo)識為“1”,反之則標(biāo)識為“0”。如圖:

位運(yùn)算與權(quán)限控制

?

如果只有“可讀”權(quán)限,那么就對應(yīng)二進(jìn)制數(shù):001,將這個(gè)二進(jìn)制數(shù)轉(zhuǎn)成十進(jìn)制就得到1;如果同時(shí)具有“可讀”、“可寫”權(quán)限,二進(jìn)制數(shù)則對應(yīng)為: 011,轉(zhuǎn)十進(jìn)制得:3;同理,三種權(quán)限都有的,十進(jìn)制就等于7。

?

實(shí)現(xiàn)

在PHP中,通過 位運(yùn)算符 很容易就可以做到類似的權(quán)限控制:

    <?php
//定義權(quán)限
define('READ', 1<< 0);    // 把可讀權(quán)限放在最右邊
define('WRITE', 1<<1);    // 可讀權(quán)限向左移一位
define('EXCUTE', 1<<2);   // 可執(zhí)行權(quán)限向左移兩位

//賦予權(quán)限
$user_permission = READ | WRITE;

//驗(yàn)證權(quán)限
echo '可讀:', ($user_permission & READ) ? 'Yes' : 'No', "\n";
echo '可寫:', ($user_permission & WRITE) ? 'Yes' : 'No', "\n";
echo '可執(zhí)行:', ($user_permission & EXCUTE) ? 'Yes' : 'No', "\n";
?>
  
?

PHP語言本身的 錯(cuò)誤控制 也是用位運(yùn)算來做的,它甚至還利用了 按位異或 按位非 ,使得錯(cuò)誤控制更加精確。

?

優(yōu)點(diǎn)和缺陷

位運(yùn)算的運(yùn)算對象是二進(jìn)制的位,速度快,效率高,而且節(jié)省存儲空間,位運(yùn)算做權(quán)限控制又相當(dāng)?shù)仂`活。但是,位運(yùn)算也有很大的局限,因?yàn)樵?2位計(jì)算機(jī)上,位移不能超過32次,這就要求權(quán)限數(shù)量不超過32種。

?

來源: http://xiaobin.net/200906/bitwise-permission/

?

?

位運(yùn)算 就是把數(shù)值轉(zhuǎn)化成二進(jìn)制數(shù)來進(jìn)行運(yùn)算,常用的位運(yùn)算符詳下表:

?

位運(yùn)算符 例子 名稱 結(jié)果
$a & $b And(按位與) 將把 $a 和 $b 中都為 1 的位設(shè)為 1。
$a | $b Or(按位或) 將把 $a 或者 $b 中為 1 的位設(shè)為 1。
$a ^ $b Xor(按位異或) 將把 $a 和 $b 中不同的位設(shè)為 1。
~ $a Not(按位非) 將 $a 中為 0 的位設(shè)為 1,反之亦然。
$a << $b Shift left(左移) 將 $a 中的位向左移動(dòng) $b 次(每一次移動(dòng)都表示“乘以 2”)。
$a >> $b Shift right(右移) 將 $a 中的位向右移動(dòng) $b 次(每一次移動(dòng)都表示“除以 2”)。

?

    <?php						
	$a=12;			/* 轉(zhuǎn)化為二進(jìn)制數(shù)為1100 */		
	$b=9;			/* 轉(zhuǎn)化為二進(jìn)制數(shù)為1001 */		
	$c=2;					
	echo "a=$a b=$b c=$c";	
	echo "<br>$a & $b =";	
	echo $a & $b;				
	echo "<br>$a | $b =";	
	echo $a | $b;				
	echo "<br>$a<<$c=";		
	echo $a<<$c;				
?>
  

?

預(yù)覽:

?

ps:用十進(jìn)制數(shù)除以2得余數(shù),繼續(xù)除每次都是取余數(shù),所得的是從低位到高位的二進(jìn)制數(shù)。

如:12/2=6 (余數(shù)0) 6/2=3(余數(shù)0) 3/2=1(余數(shù)1) 1/2=1(余數(shù)1)

即:1100。

二進(jìn)制轉(zhuǎn)換成十進(jìn)制,分別用每一位的數(shù)字×對應(yīng)的2的不同次冪。

1100即 2 0 x0+2 1 x0+2 2 x1=2 3 x1=12

?

來源: http://www.web589.com/posts/575.html

?

原理: 將每個(gè)二進(jìn)制位為一個(gè)權(quán)限標(biāo)識位

  • 增加權(quán)限使用 | (無論存在與否, 將對應(yīng)的權(quán)限位置1)
  • 刪除權(quán)限使用 ^ & ~ (無論存在與否, 將對應(yīng)的權(quán)限位置0)
  • 判斷權(quán)限使用 & ? (使用與判斷對應(yīng)的權(quán)限位是否為1, 是, 返回非0; 不是, 返回0)
        <?php   
        define("PUBLIC_ARTICLE",    1);        //發(fā)行文章   
        define("CREATE_ARTICLE",    2);        //添加文章   
        define("MODIFY_ARTICLE",    4);        //修改文章   
        define("DELETE_ARTICLE",    8);        //刪除文章   
        define("SHARCH_ARTICLE",    16);        //搜索文章   
        define("CREATE_COMMENT",    32);        //添加文章評論   
        define("DELETE_COMMENT",    64);        //刪除文章評論   
      
        //所有的權(quán)限   
        $final_allow = PUBLIC_ARTICLE | CREATE_ARTICLE | MODIFY_ARTICLE 
                     | DELETE_ARTICLE | SHARCH_ARTICLE | CREATE_COMMENT | DELETE_COMMENT;   
      
        echo "管理者擁有的全部權(quán)限:" .decbin($final_allow). "<br>";   
      
        $no_shearch_allow = $final_allow ^ SHARCH_ARTICLE;   
        echo "僅無法搜索文章的權(quán)限:" .decbin($no_shearch_allow). "<br>";   
      
        //編輯人員獨(dú)有的權(quán)限   
        $editor_allow = PUBLIC_ARTICLE | MODIFY_ARTICLE | DELETE_ARTICLE;   
        $no_editor_allow = $final_allow & ~$editor_allow;   
        echo "非編輯人員所有的權(quán)限:" .decbin($no_editor_allow). "<br>";   
    ?>  

  
?

最終輸出為:

管理者擁有的全部權(quán)限:1111111
僅無法搜索文章的權(quán)限:1101111
非編輯人員所有的權(quán)限:1110010

?

另外可以參看:

    <?php  echo $uu=array_sum($_POST[gr]);   ?>
    <form action="" method="POST">
    ADD <input type="checkbox" name=gr[] value=1 <?php echo  $uu&1? "checked":null;?>>
    UPD <input type="checkbox" name=gr[] value=2 <?php echo  $uu&2? "checked":null;?>>
    LIS <input type="checkbox" name=gr[] value=4 <?php echo  $uu&4? "checked":null;?>>
    DEL <input type="checkbox" name=gr[] value=8 <?php echo  $uu&8? "checked":null;?>>
    <input type="submit" value="提交">
    </form>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  
?

?

?

?

?

?

php 位運(yùn)算


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 青青草无限次破解版污 | 黄色片在线免费看 | 中文字幕一区在线观看视频 | 国产精品福利在线观看秒播 | 99精品欧美一区 | 国产激情一区二区三区四区 | 国产精品日日摸夜夜添夜夜av | 亚洲第一视频 | 黄色综合网站 | 国产一区高清 | 国产精品一二区 | 国产女人与拘做受视频 | 国产福利资源在线 | 欧美精品一区二区三区蜜桃视频 | 国产精品福利短视在线播放频 | 国产一区二 | 久久9999| 成人精品综合免费视频 | 日韩成人免费在线 | JLZZJLZZ日本人护士水好多 | 毛片少妇爽到高潮特黄A片 六月色播 | 91av在线免费播放 | 香蕉视频黄色 | 色婷婷综合久久久中字幕精品久久 | 久久精品欧美一区二区三区不卡 | 国产精品成人一区二区三区 | 亚洲伊人成色综合网 | 欧美精品v国产精品v日韩精品 | 午夜dj在线观看神马视频 | 99精品久久| 日韩一区二区免费视频 | 男女在线无遮挡毛片免费 | 深夜影院破解版免费vip | 精品免费久久久久久成人影院 | 清纯唯美亚洲激情 | 亚洲第一大网站 | 久久99国产综合精品 | 夜夜爽99久久国产综合精品女不卡 | 最近免费日本视频在线 | 国产目拍亚洲精品99久久精品 | 日韩版码免费福利视频 |