亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

php 位運算

系統 2410 0

原理

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

?

實際上,這種運算是基于二進制的。假設可執行、可寫、可讀三種權限分別對應三個狀態位,如果用戶具有某種權限,那么將對應的狀態位標識為“1”,反之則標識為“0”。如圖:

位運算與權限控制

?

如果只有“可讀”權限,那么就對應二進制數:001,將這個二進制數轉成十進制就得到1;如果同時具有“可讀”、“可寫”權限,二進制數則對應為: 011,轉十進制得:3;同理,三種權限都有的,十進制就等于7。

?

實現

在PHP中,通過 位運算符 很容易就可以做到類似的權限控制:

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

//賦予權限
$user_permission = READ | WRITE;

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

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

?

優點和缺陷

位運算的運算對象是二進制的位,速度快,效率高,而且節省存儲空間,位運算做權限控制又相當地靈活。但是,位運算也有很大的局限,因為在32位計算機上,位移不能超過32次,這就要求權限數量不超過32種。

?

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

?

?

位運算 就是把數值轉化成二進制數來進行運算,常用的位運算符詳下表:

?

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

?

    <?php						
	$a=12;			/* 轉化為二進制數為1100 */		
	$b=9;			/* 轉化為二進制數為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;				
?>
  

?

預覽:

?

ps:用十進制數除以2得余數,繼續除每次都是取余數,所得的是從低位到高位的二進制數。

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

即:1100。

二進制轉換成十進制,分別用每一位的數字×對應的2的不同次冪。

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

?

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

?

原理: 將每個二進制位為一個權限標識位

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

  
?

最終輸出為:

管理者擁有的全部權限:1111111
僅無法搜索文章的權限:1101111
非編輯人員所有的權限: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 位運算


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费国产一区二区在免费观看 | 九九在线精品视频xxx | 国产高清精品久久久久久久 | 麻豆一区二区 | 亚洲一级毛片在线观 | 亚洲男人的天堂在线视频 | 国产成人精品永久免费视频 | 亚洲日韩欧美综合 | 久久久久夜色精品波多野结衣 | 日本α级毛片视频免费观看 | 亚洲国产精品aa在线看 | 国产美女视频做爰 | 欧美成人另类 | 中文一级黄色片 | 久久久久久免费视频 | 91久久免费视频 | 真实偷清晰对白在线视频 | 日韩在线看片中文字幕不卡 | 一区二区中文字幕亚洲精品 | 日本一级毛片无遮挡 | 99热久久国产精品 | 国产成人综合久久亚洲精品 | 国产在线麻豆一区二区 | 精品久久中文久久久 | 欧美精品亚洲精品日韩 | 成人国产三级在线播放 | 77奇米影视| 九九这里只精品视在线99 | 成 人 黄 色 视频 免费观看 | 巴西一级毛片 | 一区二区三区在线 | 99资源在线观看 | 久久精品视频1 | 亚洲综合网在线 | 国产精品福利视频主播真会玩 | 国产成人拍精品视频网 | 免费观看一级特黄三大片视频 | 国产精品久久久久久久久ktv | 中文在线免费视频 | 狠狠色丁香婷婷综合精品视频 | 欧美色久 |