#運算子 |
說明 |
#範例 |
& |
按位與 |
$m & $n |
| |
按位或 |
$m | &$n |
#^ |
依位異或 |
$m ^ $n |
~ |
位元非或位元取反 |
$m ~ $n |
##< ;左移 | $m
>>##右移 |
$m >> $n |
|
下面我們用範例來上面一下上表中的運算子
<?php
$m=1; //1=0 00000001
$n=2; //2=00000010
$mn=$m&$n;
echo $mn."<br/>";
$mn=$m^$n;
echo $mn."<br/>";
$mn=$m|$n;
echo $mn;
?>
程式碼運行結果:
範例解釋:
$m&$n : 二者皆為1 時為1 ,否則為0。即把 $a 和 $b 中都為 1 的位元設為 1 ,否則設為 0 。
00000001 ← $m
& 00000010 ← $b
比較結果為00000000,所以輸出0
$m^$ n :在按位亦或的過程中,不同為1,相同為0。
00000001 ← $m
^ 00000010 ← $n
因此結果為00000011,進而輸出3。
$m|$n: 在位元或的過程中,有1為1,全0為0,
00000001 ← $m
| 00000010 ← $n
則結果為00000011,所以輸出3
上面的例子講了“按位或”,“按位或”,“按位位異或”,下面我們再來看一下後面的三個示例
按位非或按位取反示例,代碼如下
<?php
$m = 2;
$m1 = ~$m;
echo $m1;
?>
運行結果
此時我們的運行結果為-3,這裡要注意。
註:在計算機中,負數以其正值的補碼形式表達。
1: 2的32位原碼為0000 0000 0000 0000 0000 0000 0000 0010
2: 按位取反後為1111 1111 1111 1111 1111 1111 1111 1101
由於最前面的數為1,符號位為1,即為負數,所以,以其正值的補碼形式表示為:(符號位不變,按位取反,末尾加1)
1000 0000 0000 0000 0000 0000 0000 0011
所以輸出為-3
#左移右移程式碼範例
左移右移程式碼範例<?php
$m = 12; // 12=00001100
$n = 3; // 3=00000011
$mn= $m << $n;
echo $mn ."<br/>";
$mn= $m >> $n;
echo $mn ;
?>
執行結果:
範例解釋:
$m:將$m 中的位元向左移動$n 次(每一次移動都表示“乘以2”,即“乘以2$b ”)。
0000 1100 ← $m
0110 0006
#$m>>$n
:將$m中的位元向右移動$n 次(每一次移動表示“除以2”,即“乘以2 -$b ”)。 0000 1100 ← $m
0000 0001 = 1
######上面的內容就是PHP運算中的「位元運算子」的詳細內容,如果有什麼不懂的,可以關注我們PHP中文網,在上面進行留言,我們將第一時間給你解答或是在PHP中文網搜索,或許能找到你想的。下一節,我們將詳細介紹###PHP運算中的邏輯運算子###。 ###