비트 연산자
비트 연산은 이진 데이터를 연산 하기 때문에 먼저 비트와 바이트의 개념에 대해서 간략하게 살펴보고 비트 연산에 대해서 알아보도록 하겠습니다.
비트( bit, binary digit )
비트(bit)는 binary digit의 약자입니다. 비트는 0과 1의 값만 가질 수 있으며, 그 표현은 기수법 2진수로 표현합니다. 컴퓨터 시스템은 0은 off를 의미하며 on은 1을 의미합니다.
바이트(Byte)
바이트는 정보의 기본단위이며 일련의 비트(bit)로 구성됩니다. 1바이트 당 8비트로 구성되었습니다.
단위/기호 | 용량 단위 |
1바이트(Byte) | 8 bit |
1킬로바이트(KB) | 1024 Byte |
1메가바이트(MB) | 1024 KB |
1기가바이트(GB) | 1024MB |
1테라바이트(TB) | 1024GB |
1페타바이트(PB) | 1024TB |
1엑사바이트(EB) | 1024PB |
비트 연산자
연산자 기호 | 연산자 명 | 사용 예 | 결과 |
& | and | $a & $b | 두 변수 $a와 $b의 이진 데이터를 비트 단위로 비교하여 and 연산을 합니다. |
| | or | $a | $b | 두 변수 $a와 $b의 이진 데이터를 비트 단위로 비교하여 or 연산을 합니다. |
^ | xor | $a ^ $b | 두 변수 $a와 $b의 이진 데이터를 비트 단위로 비교하여 xor 연산을 합니다. |
~ | not | ~$a | 이진 데이터를 반전 시킵니다. 1은 0으로 0은 1로 변경합니다. |
<< | shift left | $a << $b | $a를 왼쪽으로 $b bit만큼 이동합니다. |
>> | shift right | $a >> $b | $a를 오른쪽으로 $b bit만큼 이동합니다. |
and(&) 비트 연산
다음 예제는 두 변수의 이진 데이터를 and 연산하여 결과를 출력합니다.
bit | bit | bit | |
1 | 0 | 1 | 5 |
1 | 0 | 0 | 4 |
1 = true | 0 = false | 0 = false | 4 |
두 변수를 bit 단위로 연산하는 데 있어서 1은 true, 0은 false를 의미합니다. and 연산은 비교하는 두 bit가 모두 1일 경우에만 true로 연산합니다. 그렇지 않은 경우는 false입니다.
<?php
$a=5;
$b=4;
echo "\$a = ".decbin($a)."<br/>"; //결과 이진수 101
echo "\$b = ".decbin($b)."<br/>"; // 결과 이진수 100
echo "결과 :".($a & $b);
or(|) 비트 연산
다음 예제는 두 변수의 이진 데이터를 or 연산하여 결과를 출력합니다.
bit | bit | bit | |
1 | 0 | 1 | 5 |
1 | 0 | 0 | 4 |
1=true | 0=false | 1=true | 5 |
두 변수의 or연산은 비교하는 두 bit가 그 중 하나만 true여도 true로 계산하여 처리합니다. 두 변수의 비교 bit가 모두 false이어야만 false로 연산합니다.
<?php
$a=5;
$b=4;
echo "\$a = ".decbin($a)."<br/>"; //결과 이진수 101
echo "\$b = ".decbin($b)."<br/>"; // 결과 이진수 100
echo "결과 :".($a | $b); //결과 5
not(~) 비트 연산
다음 예제는 변수 $b를 not 연산하여 반전 시킵니다. $b의 2이진 데이터는 10입니다. not 연산을 하여 0을 1로 1을 0으로 반전 시킵니다. 그리고 두 변수 $a와 $b를 and 연산합니다.
<?php
$a=4;
$b=2;
echo "\$a = 0000000000000000000000000000000000000000000000000000000000000".decbin($a)."<br/>"; //결과 이진수 0000000000000000000000000000000000000000000000000000000000000100
echo "\$b = ".decbin(~$b)."<br/>"; // 결과 이진수 1111111111111111111111111111111111111111111111111111111111111101
echo "결과 :".($a & ~$b); //결과 4
shift left(<<) 비트 연산과 shift right(>>) 비트 연산
두 변수 $a, $b를 shift left 비트 연산을 하면 $a × $b × 2 이와 같이 연산을 하며, shift right 비트 연산을 하면 $a ÷ $b × 2 이와 같은 연산을 합니다.
[shift left 비트 연산]
2개의 bit를 추가를 하여 10진수 12의 값이 10진수 48이 되었습니다.
bit | bit | bit | bit | bit | bit | bit | ||
$a | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 48 |
12 | 2개의 bit를 추가 |
<?php
$a=12;
$b=2;
echo "\$a = ".decbin($a)."<br/>"; // 결과 이진수 1100
echo "\$b = ".decbin($b)."<br/>"; // 결과 이진수 10
echo $a << $b;
?>
[shift right 비트 연산]
2개의 bit를 제거하여 10진수 12가 10진수 3이 되었습니다.
bit | bit | bit | bit | bit | bit | bit | ||
$a | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 3 |
0 | 0 | 0 | 1 | 1 | 0 | 0 | 12 | |
2개 bit를 제거 |
<?php
$a=12;
$b=2;
echo "\$a = ".decbin($a)."<br/>"; // 결과 이진수 1100
echo "\$b = ".decbin($b)."<br/>"; // 결과 이진수 10
echo $a >> $b;
?>
'소프트웨어 개발 > PHP' 카테고리의 다른 글
[PHP 기초강좌] 조건문 - switch case (0) | 2023.02.16 |
---|---|
[PHP 기초강좌] 조건문 - if/else, 삼항 연산자 (0) | 2023.02.15 |
[PHP 기초강좌] 연산자 - 배열 연산자 (0) | 2023.02.13 |
[PHP 기초강좌] 연산자 - 문자열 연산자 (0) | 2023.02.11 |
[PHP 기초강좌] 연산자 - 논리 연산자 (0) | 2023.02.10 |
댓글