PHP 快速導覽 - 位元運算

資料 (data) 儲存在電腦中的方式為利用 0 與 1 的編碼,例如八位元 (bit) 的整數 (integer) 25 為

0001 1001


另如 ASCII 編碼中的字母 f 為
0110 0110


所謂的位元運算 (bit operation) ,就是逐位元進行比較,例如以上兩項編碼做邏輯或的位元運算
0001 1001 or 0110 0110


結果會是
0111 1111


PHP 的位元運算子 (bitewise operstor) 如下列表
運算子功能範例
&逐位元且$a & $b
|逐位元或$a | $b
^逐位元互斥或$a ^ $b
~逐位元非~ $a
<<向左位移$a << $b
>>向右位移$a >> $b


以下例子示範位元運算子的使用
<?php
$a = 5;
$b = 3;

echo (~$a) . "\n";
echo ($b << 2) . "\n";
echo ($b >> 2) . "\n";
echo ($a & $b) . "\n";
echo ($a | $b) . "\n";
echo ($a ^ $b) ;

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:e08.php
    功能:示範 PHP 程式 
    作者:張凱慶
    時間:西元 2013 年 2 月 */
?>


執行結果如下



由於 5 用二進位 32 位元的表示為
0000 0000 0000 0000 0000 0000 0000 0101


取其補數變為
1111 1111 1111 1111 1111 1111 1111 1010


換算成十進位為 -6 。類似的 3 用二進位 32 位元的表示為
0000 0000 0000 0000 0000 0000 0000 0011


向左位移 2 個位元,變為
0000 0000 0000 0000 0000 0000 0000 1100


空出的位元補上 0 ,就變成十進位數字的 12 ,向左位移 2 個位元,就是原數乘上 22 ,也就是說乘以 4 。由於向右位移直接把位元移開,原空出的位元補上 0 ,就變成
0000 0000 0000 0000 0000 0000 0000 0000


所以兩個運算結果都是 0 。且、或、互斥或的運算,以二進位表示如下
101 and 011 = 001
101 or 011 = 111
101 xor 011 = 110


因此 3 且 5 ,結果會是 1 ; 3 或 5 ,結果為 7 ; 3 互斥或 5 ,結果則是 6 。


中英文術語對照
資料data
位元bit
整數integer
位元運算bit operation
位元運算子bitewise operstor


您可以繼續參考
運算式


相關目錄
回 PHP 快速導覽
回 PHP 教材
回首頁


參考資料
http://www.php.net/manual/en/language.operators.bitwise.php

沒有留言: