본문 바로가기
소프트웨어 개발/PHP

[PHP 기초강좌] 연산자 - 비트 연산자

by 인생은즐겁게 2023. 2. 14.
반응형

비트 연산자

 

 비트 연산은 이진 데이터를 연산 하기 때문에 먼저 비트와 바이트의 개념에 대해서 간략하게 살펴보고 비트 연산에 대해서 알아보도록 하겠습니다.   

 

 

비트( 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);

<그림 1> and 비트 연산 예제 결과

 

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

<그림 2>or 비트 연산 예제 결과

 

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

<그림 3> not 비트 연산 예제 결과

 

 

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;

?>

<그림 4> shift left 비트 연산 예제 결과

 

[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;

?>

<그림 5> shift right 비트 연산 예제 결과

반응형

댓글