연산자 (Operators)


비트 연산자

연산자 기호 사용 예 비고
AND & $b1 & $b2 $b1과 $b2를 bit AND
OR | $b1 | $b2 $b1과 $b2를 bit OR
보수 ~ ~$b1 $b1을 반전(0은 1로 , 1은 0으로)
XOR ^ $b1 ^ $b2 $b1과 $b2를 bit XOR
왼쪽시프트 << $b1 << 8 $b1을 왼쪽으로 8자리만큼 시프트
오른쪽시프트 >> $b1 >> 8 $b1을 오른쪽으로 8자리만큼 시프트
<?php
    $b1 = 0x11;                // 0001 0001
    echo "$b1\r\n";
    $b2 = 0x23;                // 0010 0011
    echo "$b2\r\n";
    $b3 = $b1 & $b2;           // 0000 0001, bit AND
    echo "$b3\r\n";
    $b3 = $b1 | $b2;           // 0011 0011, bit OR
    echo "$b3\r\n";
    $b3 = ~$b1;                // 1110 1110, NOT
    echo "$b3\r\n";
    $b3 = $b1 << 1;            // 0010 0010, 왼쪽으로 1비트 이동 (곱하기 2)
    echo "$b3\r\n";
    $b3 = $b1 >> 1;            // 0000 1000, 오른쪽으로 1비트 이동 (나누기 2)
    echo "$b3\r\n";
?>
[출력결과]  
17
35
1
51
-18
34
8
  • 왼쪽시프트
    왼쪽시프트 연산에 의해 생성되는 비트들은 항상 값이 0으로 채워지게 됩니다.
<?php
    $b1 = 0xFFFFFFFFFFFFFFFF;  // -1
    $b2 = $b1 << 1;            // 0xFFFFFFFFFFFFFFFE (0이 채워짐)
    echo "$b2";
?>
[출력결과]  
-2
  • 오른쪽시프트
    오른쪽시프트 연산에 의해 생성되는 비트들은 부호비트(Sign bit)와 같은 값으로 채워지게 됩니다.
<?php
    $b1 = 0xFFFFFFFFFFFFFFFF;  // -1
    $b2 = $b1 >> 1;            // 0xFFFFFFFFFFFFFFFF (1이 채워짐)
    echo "$b2";
?>
[출력결과]  
-1