位元運算子(Bitwise Operator)

位元運算子其實不常用,新手可以略過這個章節沒關係

但是為了該章節的完整性,所以還是大略介紹一下

位元運算子是用來運算二進位數字的,不知道什麼是二進位的請先看

【作業用教學動畫】一分半搞懂二進位

有興趣想要暸解多一點的話,可以看:為什麼電腦是只有0與1的世界?世界上只有10種人,一種是懂二進位的

而二進位的位元運算是根據以下的規則來做計算

範例 名稱 說明
$a & $b 交集(And) $a和$b的位元皆為1的部份為1
$a \ $b 聯集(Or) $a或$b的位元其中一方為1的部份為1
$a ^ $b 互斥(Xor) $a和$b的位元只有其中一方為1的部份為1
~ $a 補數(Not) $a為1的部份為0,為0的部份為1
$a << $b 位元左移(Shift left) $a往左移動$b個位元(意同$a乘以2的$b次方)
$a >> $b 位元右移(Shift right) $a往右移動$b個位元(意同$a除以2的$b次方之整數)

交集(And):

<?php
    echo 11&13; //output:9
    /*
    and運算就是雙方位元都是1的位元才輸出1,其他都輸出0
        11(1011)
    &   13(1101)
    ------------
         9(1001)    
    */
?>

聯集(Or):

<?php
    echo 11|13; //output:15
    /*
    or運算就是雙方中一方位元是1就輸出1,雙方都是0才輸出0
        11(1011)
    |   13(1101)
    ------------
        15(1111)    
    */
?>

互斥(Xor):

<?php
    echo 11^13; //output:6
    /*
    xor運算就是雙方中一方位元是1,另一方位元是0就輸出1,其他都輸出0
        11(1011)
    ^   13(1101)
    ------------
         6(0110)    
    */
?>

補數(Not):

<?php
    echo ~11; //output:-12
    /*
    not運算就是將全部位元0換成1,1換成0
     ~  11(1011)
    ------------
       -12(0100)    
    */
?>

左移(Shift Left):

<?php
    echo 11<<2; //11往左邊移動2個位元,output:44
    /*
    左移運算就是將全部位元往左移兩格,然後右邊補上0
    11(1011) ->左移一次,右邊補0-> 22(10110) ->左移一次,右邊補0-> 44(101100)
    */
?>

右移(Shift Right):

<?php
    echo 11>>2; //11往右邊邊移動2個位元,output:2
    /*
    右移運算就是將全部位元往右移兩格,超出右邊個位數的位元就直接不要了,然後左邊邊補上0
    11(1011) ->右移一次,左邊補0-> 5(0101) ->右移一次,左邊補0-> 2(0010)
    */
?>

results matching ""

    No results matching ""