首頁 後端開發 php教程 php 位元運算符的用途

php 位元運算符的用途

Jun 20, 2017 pm 01:39 PM
php 位元運算符 運算符

下面小編就為大家帶來一篇php 位元運算子的用途。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧

在實際應用程式中可以做使用者權限的應用程式

我這裡說到的權限管理辦法是一個普遍採用的方法,主要是使用到”位元運行符」操作,& 位元與運算子、| 位元或運行符。參與運算的如果是10進位數,則會被轉換至2進位數參與運算,然後計算結果會再轉換為10進位數輸出。

它的權限值是這樣的

#2^0=1,對應2進數為」0001″(在這裡^我表示成”次方”,即:2的0次方,下同)

2^1=2,對應2進數為”0010″
2^2=4,對應2進數為”0100″
2^3=8,對應2進數為”1000″

要判斷一個數在某些數範圍內就可以使用& 運算子(數值從上面的表中得來)

如:7=4|2|1 (你也可以簡單理解成7=4+2+1)

用& 來操作,可以知道7&4、7&2、7&1都是真的,而如果7&8則是假的

&、| 不熟悉的就要去查查手冊,看看是怎麼用的了

下面來看範例吧:

// 赋予权限值-->删除:8、上传:4、写入:2、只读:1
define(“mDELETE”,8);
define(“mUPLOAD”,4);
define(“mWRITE”,2);
define(“mREAD”,1);
//vvvvvvvvvvvvv使用说明vvvvvvvvvvvvv
//部门经理的权限为(假设它拥有此部门的所有权限),| 是位或运行符,不熟悉的就查查资料
echo mDELETE|mUPLOAD|mWRITE|mREAD ,”
“;// 相当于是把上面的权限值加起来:8+4+2+1=15
// 设我只有 upload 和 read 权限,则
echo mUPLOAD|mREAD ,”
“;//相当于是把上传、只读的权限值分别相加:4+1=5
/*
*赋予它多个权限就分别取得权限值相加,又比如某位员工拥有除了删除外的权限其余都拥有,那它的权限值是多少?
*应该是:4+2+1=7
*明白了怎么赋值给权限吧?
*/
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//判断某人的权限可用,设权限值在$key中
/*
*判断权限用&位与符,
*/
$key = 13;//13=8+4+1
if($key & mDELETE) echo “有删除权限
“; //8
if($key & mUPLOAD) echo “有上传权限
“; //4
$a=$key & mWRITE; echo “有写权限
“.$a; //无此权限
if($key & mREAD) echo “有读权限
“; //1
?>
登入後複製

OK,權限分值的這其中一個演算法就是這樣的,可以說是簡單高效。也不知大家明白沒有,不懂也沒關係,記得例子就行了。前提就是做好權限值的分佈,也就是那個1、2、4、8、16….(這裡還有個順序問題,越高級的權限就要越高的權限值,例如上面的例子所示範的刪除權限)。有了權限分佈表就可以確定要給某個人甚麼權限了,你簡單的理解成要哪個權限就加上對應的權限值吧。

這個方法很好用的,缺點就是如果權限分佈得細的話,那麼權限值會越來越大,你自己想想,2的幾次方、如果所有的權限都要則是全部相加。不過對於一般的權限來說這個已經足夠了。

以下是些簡單應用範例

#(1) 判斷int型變數a是奇數還是偶數

a&1 = 0 偶數

a&1 = 1 奇數

(2) 取int型變數a的第k位(k =0,1,2……sizeof(int)),即a>>k&1

#(3) 將int型變數a的第k位清0,即a=a&~(1<

<>

(4) 將int型變數a的第k位置1, 即a=a|(1<

<>

(5) int型變數循環左移k次,即a=a<>16-k (設sizeof(int)=16)

(6) int型變數a循環右移k次,即a=a>>k|a<<16-k (設sizeof(int)=16)

##(7)整數的平均值

對於兩個整數x,y,如果用(x+y)/2 求平均值,會產生溢出,因為x+y 可能會大於INT_MAX,但是我們知道它們的平均值是肯定不會溢出的,我們用如下演算法:

int average(int x, int y) //返回X,Y 的平均值

{ 

return (x&y)+((x^y)>>1);

}
登入後複製

(8)判斷一個整數是不是2的冪,對於一個數x >= 0,判斷他是不是2的冪

boolean power2(int x)

{

return ((x&(x-1))==0)&&(x!=0);

}
登入後複製

#(9)不用temp交換兩個整數

void swap(int x , int y)

{

x ^= y;

y ^= x;

x ^= y;

}
登入後複製

(10)計算絕對值

int abs( int x )

{

int y ;

y = x >> 31 ;

return (x^y)-y ; //or: (x+y)^y

}
登入後複製

(11)取模運算轉換成位元運算 (在不產生溢出的情況下)

a % (2^n) 等價於a & (2^n – 1)

(12)乘法運算轉換成位元運算(在不產生溢出的情況下)

#a * (2^n) 等價於a<< n

(13)除法運算轉換成位元運算(在不產生溢位的情況下)

a / (2^n) 等價於a>> n

例: 12/8 == 12>>3

(14) a % 2 等價於a & 1

(15) if (x == a) x= b;

   else x= a;

   等價於x= a ^ b ^ x;

(16) x 的相反數表示為(~x+1)#

在32位元系統上不要右移超過32位元,不要在結果可能超過 32 位的情況下左移

以上是php 位元運算符的用途的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

為了進行文件上傳,我們將使用表單助理。這是文件上傳的範例。

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 是一個開源MVC 框架。它使應用程式的開發、部署和維護變得更加容易。 CakePHP 有許多函式庫可以減少大多數常見任務的過載。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

See all articles