비트 연산자는 말그대로 0과 1로 이루어진 2진수를 가지고 연산을 합니다.



예제 

 설명

 결과 

 $a & $b

 AND

 두 비트가 모두 1인 값을 반환

 $a | $b

 OR

 두 비트 중 하나라도 1이면 1를 반환

 $a ^ $b

 XOR

 두 비트가 다를 때 1를 반환

 ~$a

 NOT

 비트 NOT 연산자, 비트 뒤집기

 $a << $b

 Shilft Left

 $a 를 왼쪽으로 $b 만큼 이동

 $a >> $b

 Shift Right

 $a 를 오른쪽으로 $b 만큼 이동


AND 연산자

주어진 비트 중 두 비트가 모두 1이라면 참입니다.


 32  16  8  4  2  1  -> 10 진수 표현

---------------------

  0    0  1  0  1  0  -> 10 진수로 표현하면 10 입니다.

  0    1  1  0  0  0  -> 10 진수로 표현하면 24 입니다.

---------------------

  0    0  1  0  0  0   -> 10 진수로 표현하면 8입니다.

---------------------


 여기서 두 비트가 일치하는 비트는 8이므로 8을 반환합니다. 

ex.1)

 <?php
   echo 10 & 24; // 결과: 8 
 ?>


OR 연산자

주어진 비트 중 하나라도 1이면 참으로 합니다.


 32  16  8  4  2  1  -> 10 진수 표현

---------------------

  0    0  1  0  1  0  -> 10 진수로 표현하면 10 입니다.

  0    1  1  0  0  0  -> 10 진수로 표현하면 24 입니다.

---------------------

  0    1  1  0  1  0   -> 10 진수로 표현하면 26입니다. ex.1) 16 + 8 + 2 = 26

---------------------


 여기서 두 비트 중 하나라도 일치하는 비트는 16, 8, 2 이므로 26 입니다. 


ex.1)

 <?php
   echo 10 | 24; // 결과: 26 
 ?>


XOR 연산자

주어진 비트 중 두 비트가 다른 값을 반환합니다.

 32  16  8  4  2  1  -> 10 진수 표현

---------------------

  0    0  1  0  1  0  -> 10 진수로 표현하면 10 입니다.

  0    1  1  0  0  0  -> 10 진수로 표현하면 24 입니다.

---------------------

  0    1  0  0  1  0   -> 10 진수로 표현하면 18입니다. ex.1)  16 + 2 = 18

---------------------


 여기서 두 비트가 일치하지 않는 비트는 16과 2이므로 18을 반환합니다. 


ex.1)

 <?php
 echo 10 ^ 24; // 결과: 18 
 ?>


NOT 연산자

비트 NOT 연산자는 1를 0으로 0을 1로 바꾸는 것으로 "비트 뒤집기" 또는 "비트 반전"이라고 부릅니다.

 32  16  8  4  2  1   0 -1 -2 -4 -8 -16   -> 10 진수 표현

----------------------------------------

  0    0  1  0  1  0   0  0  0  0   0    0   -> 10 진수로 표현하면 10 입니다.

----------------------------------------

  0    0  0  1  0  1  -1 -1 -1-1 -1    0   -> 10 진수로 표현하면 -11 입니다.


  ex.1)  10 - 20 - 1 = -11


ex.1)

 <?php
 echo ~10; // 결과: -11 

 echo ~100; // 결과: -101

 echo ~50; // 결과: -51

 echo ~25; // 결과: -26
 ?>


Shift Left 연산자

주어진 값 만큼 왼쪽으로 비트를 이동하는 연산자입니다. 각 단계는 2로 곱하기를 의미합니다.


 32  16  8  4  2  1  -> 10 진수 표현

---------------------

  0    0  1  0  1  0  -> 10 진수로 표현하면 10 입니다.

-<--<--<--<--<--- 

  0    1  0  1  0  0   -> 비트를 왼쪽으로 1만큼 이동시키면 20 이 됩니다.


 여기서 8과 2를 왼쪽으로 1칸 이동시키면 16과 4가 되므로 결과는 20 이 됩니다.

 ex.) 10*2 = 20이 되며 2칸 이동시키면 10*2*2 = 40 이 됩니다.


ex.1)

 <?php
 echo 10 << 1; // 결과: 20 
 ?>


Shift Right 연산자

주어진 값 만큼 오른쪽으로 비트를 이동하는 연산자입니다. 각 단계는 2로 나누기를 의미합니다.


 32  16  8  4  2  1  -> 10 진수 표현

---------------------

  0    0  1  0  1  0  -> 10 진수로 표현하면 10 입니다.

->-->-->-->-->--- 

  0    0  0  1  0  1   -> 비트를 오른쪽으로 1만큼 이동시키면 5가 됩니다.


 여기서 8과 2를 오른쪽으로 1칸 이동시키면 4와 1이 되므로 결과는 5 이 됩니다.

 ex.) 10/2 = 5가 되며 2칸 이동시키면 10/2 = 5/2 = 2 가 됩니다.


ex.1)

 <?php
 echo 10 >> 1; // 결과: 5
 ?>