검수요청.png검수요청.png

비트연산자

위키원
rlatpdbs2931 (토론 | 기여)님의 2020년 8월 10일 (월) 16:05 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
이동: 둘러보기, 검색

비트연산자(bitwise operator)는 비트 연산자는 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자이다. 비트는 바이트 단위보다 더 작은 단위이며, 2진수를 저장한다. 즉 컴퓨터에서 사용할 수 있는 최소 단위이다. 또한 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때도 사용한다.[1]

개요

비트 연산자는 데이터를 비트 단위로 연산한다. 그러므로 0과 1로 표현이 가능한 정수 타입만 비트 연산이 가능하다. 비트 연산자는 기능에 따라 비트 이동 연산자, 비트 논리 연산자로 구분된다. [1]

특징

논리 연산자

[2]

비트 연산자
종 류 연산자 설 명
논리 연산자 & 대응 되는 비트가 모두 1이면 1을 반환한다. (비트 AND 연산)
대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산)
^ 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산)
~ 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산)


논리 연산자는 (&,│,^,~)로 이루어져 있으며 비트 논리 연산자는 그 대상이 boolean타입일 경우에는 일반 논리 연산자로 활용되지만 대상이 정수형일 경우에는 위의 표와 같이 비트 논리연산자로 활용한다. 비트 연산은 두 값을 비트 단위로 나열한 뒤 각 자릿수를 비트 연산자로 연산한다. 각 자릿수의 연산은 독립적이며 다른 자릿수에 영향을 주지 않는다. [3]


AND 연산자

AND 연산자 예시

& (AND연산)

AND 연산 결과
입력값 반환값
0, 0 0
0, 1 0
1, 0 0
1, 1 1

& 연산(논리곱)은 2진수로 표현된 2개의 피연산자를 AND연산 하여 결과를 나타낸다.
AND 연산자는 2진수로 표현된 두 비트가 모두 1일 때만 1을 반환하며, 다른 경우는 모두 0을 반환한다.[3]



OR 연산자

OR 연산자 예시

│ (OR연산)

OR 연산 결과
입력값 반환값
0, 0 0
0, 1 1
1, 0 1
1, 1 1

| 연산(논리합)은 2진수로 표현된 2개의 피연산자를 OR연산 하여 결과를 나타낸다.
OR 연산자는 대응되는 두 비트 중 하나라도 1이면 1을 반환하며, 두 비트가 모두 0일 때만 0을 반환한다. [3]




XOR 연산자

XOR 연산자 예시

^ (XOR연산)

OR 연산 결과
입력값 반환값
0, 0 0
0, 1 1
1, 0 1
1, 1 0

^ 연산(배타적 논리합)은 2진수로 표현된 2개의 피연산자를 XOR연산 하여 결과를 나타낸다.
XOR 연산자는 대응되는 두 비트가 서로 다르면 1을 반환하고, 서로 같으면 0을 반환한다. [3]



NOT 연산자

NOT 연산자 예시

~ (NOT연산)

NOT 연산 결과
입력값 반환값
0 1
1 0

^연산(배타적 논리합)은 2진수로 표현된 2개의 피연산자를 XOR연산 하여 결과를 나타낸다.
XOR 연산자는 대응되는 두 비트가 서로 다르면 1을 반환하고, 서로 같으면 0을 반환한다. [3]



(예제)

 System.out.println(" 15 & 25 = " + (15 % 25));
 System.out.println(" 15 | 25 = " + (15 | 25));
 System.out.println(" 15 ^ 25 = " + (15 ^ 25));
 System.out.println(" ~25 = " + (~25)); 
15 & 25 = 9 15 | 25 = 31 15 ^ 25 = 22 ~25 = -26


이동 연산자

[2]

비트 연산자
종 류 연산자 설 명
이동 연산자 << 비트값을 주어진 숫자만큼 왼쪽으로 이동 시킨 후 빈자리는 0으로 채운다. (left shift 연산)
>> 비트값을 주어진 숫자만큼 오른쪽으로 이동 시킨 후 빈자리는 정수 a의 최상의 부호비트와 같은 값으로 채운다. (right shift 연산)
>>> (자바에만 존재)비트 값을 주어진 숫자 만큼 오른쪽으로 이동 시킨 후 빈공간을 모두 0으로 채운다


Left Shift 연산자

<< (left shift 연산)

<< 연산자는 두개의 피연산자를 요구하며 다음의 의미를 가진다.
num 비트를 왼쪽으로 1칸씩 이동시킬 때마다 정수의 값은 2배가 된다.
num 비트를 오른쪽으로 1칸씩 이동시킬 때마다 정수의 값은 2로 나누어진다.[4]

 << 연산결과
 int num1 = 3
 num1 << 2; // num1 의 결과 값 3의 비트열을 2칸 왼쪽으로 이동한다. //
 
num1 = 0000 0011 num1 = 0000 1100 // num1 의 결과 값이 3에서 12로 변한다.//

Right Shift 연산자

>> (right shift 연산)

>> 연산자는 두개의 피연산자를 요구하며 다음의 의미를 가진다.
num1 >> num2 : num1의 비트 열을 num2칸씩 오른쪽으로 이동시킨 결과를 반환한다.
[4]

 >> 연산결과
 int num1 = 9
 num1 >> 2; // num1 의 결과 값 9의 비트열을 2칸 오른쪽으로 이동한다. //
 
num1 = 0000 1001 num1 = 0000 0010 // num1 의 결과 값이 9에서 2로 변한다.//

>>> (right shift 연산)

>>> 연산은 오직 자바에만 있는 연산이며 >> 연산과 기본원리는 같다. 연산자에서 중요하게 볼 부분은 음수의 이동이다. >> 연산자일때 양수의 이동일 경우 자동으로 0이 채워지지만 음수일 경우에는 0을 채우는 경우와 1을 채우는 경우로 나뉘어진다.
하지만 >>> 연산자는 맨 왼쪽에서 최상위 부호비트와 관계없이 무조건 0으로 채워지기 때문에 결과값은 무조건 양수로만 나타나게 된다.[4]

 >>> 연산결과
 int num1 = 9
 num1 >>> 2; // num1 의 결과 값 9의 비트열을 2칸 오른쪽으로 이동한다. //
 
num1 = 0000 1001 num1 = 0000 0010 // 양수일때는 >> 연산과 결과값이 같게 나온다.//
int num1 = -9; num1 = num1 >>> 2; 1073741821 // 음수일경우 이상한 값이 나온다. 그 이유는 빈자리를 0으로 채우기 때문이다.//
int num1 = 0; num1 = num1 >>> 2; -3 // 따라서 음수일 때는 -부호를 붙여 사용하면 된다.

각주

  1. 1.0 1.1 비트 연산자〉, 《TCP SCHOOL》
  2. 2.0 2.1 비트 연산자의 종류〉, 《김로키》
  3. 3.0 3.1 3.2 3.3 3.4 논리 연산자의 종류〉, 《코딩 팩토리》
  4. 4.0 4.1 4.2 이동 연산자의 종류〉, 《구운밤》

참고자료

같이 보기


  검수요청.png검수요청.png 이 비트연산자 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.