首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 位運算符實戰:按位或(|)、按位與(&)與變量引用陷阱

     編輯:PHP 相關知識

代碼片段與輸出分析

$i = 0;
$i = $i | 1;   // 輸出 1
echo "$i
"; echo $i |= 2; // 輸出 3 echo "
"; // echo $i |= 4; echo "
"; echo $i |= 8; // 輸出 11 echo "
"; echo $i & 1; // 輸出 1 echo "
"; echo $i & 2; // 輸出 2 echo "
"; echo $i & 4; // 輸出 0 echo "
"; echo $i & 8; // 輸出 8

輸出結果: 1, 3, 11, 1, 2, 0, 8

核心知識點解析

1. 變量前必須加 $ 符號

代碼中 $i=i|1; 缺少 $ 會導致語法錯誤或誤按常量處理。正確寫法:$i = $i | 1; 或 $i |= 1;。

2. 雙引號 vs 單引號

  • echo "$i":解析變量值,輸出 1
  • echo '$i':按字面量輸出字符串 $i

3. 按位或(|)累加標誌位

$i |= 1 相當於 $i = $i | 1。二進制演示:

初始 $i = 0 (0000)
$i |= 1  → 0001 = 1
$i |= 2  → 0011 = 3
$i |= 8  → 1011 = 11

常用於權限掩碼、狀態標誌組合。

4. 按位與(&)檢測標誌位

$i & 4 對應二進制 0100,因 $i=11 (1011) 第 3 位為 0,故結果為 0。此技巧常用於 if ($permission & READ) 判斷權限。

5. 註釋中的誤區修正

原文稱「$i & 4 為小於 0」,實際結果為 0(非負),非負數。位運算結果為無符號整數,不會產生負值。

最佳實踐建議

  • 定義常量作為掩碼:define('READ', 1); define('WRITE', 2);
  • 使用 $flags |= READ 設置權限,if ($flags & READ) 判斷權限
  • 嚴格區分 =(賦值)與 |=(按位或賦值),避免邏輯錯誤

總結

位運算是高效標誌位管理的利器,但前提是變量引用正確、理解二進制位邏輯。本例展示了典型的「設置-檢測」模式,也是權限系統、狀態機的基礎實現方式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved