연산자 (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