비트연산자란? 컴퓨터의 비트 단위로 데이터를 처리하는 연산자
비트연산자 | 예시 | 설명 | |
& | AND | 0 & 0 == 0 0 & 1 == 0 1 & 1 == 1 |
두 비트의 값이 모두 1인 경우에만 1을 반환 |
| | OR | 0 | 0 == 0 0 | 1 == 1 1 | 1 == 1 |
두 비트 중 하나라도 1인 경우에는 1을 반환 |
^ | XOR | 0 ^ 0 == 0 0 ^ 1 == 1 1 ^ 1 == 0 |
두 비트가 서로 다른 경우에 1을 반환 |
~ | NOT | ~0 == 1 ~1 == 0 |
0이면 1을, 1이면 0을 반환 |
<< | LEFT SHIFT | a << b | 비트를 왼쪽으로 지정된 수(b)만큼 이동 오른쪽에 0이 추가되고, 왼쪽에서 벗어나는 비트는 버려짐 |
>> | RIGHT SHIFT | a >> b | 비트를 오른쪽으로 지정된 수(b)만큼 이동 왼쪽에는 부호 비트가 추가되고, 오른쪽으로 벗어나는 비트는 버려짐 |
>>> | UNSIGNED RIGHT SHIFT | a >>> b | 비트를 오른쪽으로 지정된 수만큼 이동 왼쪽에는 항상 0이 추가되고, 오른쪽으로 벗어나는 비트는 버려짐 |
AND 연산자 ( & )
두 비트의 값이 모두 1인 경우에만 1을 반환한다.
51 & 85 = 17
0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | |
& | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
= | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
OR 연산자 ( | )
두 비트 중 하나라도 1인 경우에는 1을 반환한다.
51 | 85 = 77
0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | |
| | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
= | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
XOR 연산자 ( ^ )
두 비트가 서로 다른 경우에 1을 반환한다.
51 ^ 85 = 66
0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | |
^ | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
= | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 |
NOT 연산자 ( ~ )
0이면 1을, 1이면 0을 반환한다.
~85 = 170
~ | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
= | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
Left Shift 연산자 ( << )
비트를 왼쪽으로 지정된 수만큼 이동하며, 오른쪽에 0이 추가되고, 왼쪽에서 벗어나는 비트는 버려진다.
51 << 3 = 408
<< 3 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | |
= | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
Right Shift 연산자 ( >> )
비트를 오른쪽으로 지정된 수만큼 이동하며, 왼쪽에는 부호 비트(최상위 비트(MSB))가 추가되고, 오른쪽으로 벗어나는 비트는 버려진다.
아래 예시에서 -51은 음수이므로 최상위 비트는 1이며 왼쪽에 1이 추가된다.
-51 >> 3 = -7
>> 3 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
= | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
위 예시에서 11110011 은 2의 보수를 제거하면 11110010이며, 다시 1의 보수를 제거하면 00001101이 된다. 따라서 00001101인 13에 - 가 붙어 -13이다.
혹은 2^7 + 2^6 + 2^5 + 2^4 + 0 + 0 + 2^1 + 2^0 로 계산할 수 있다.
Unsigned Right Shift 연산자 ( >>> )
비트를 오른쪽으로 지정된 수만큼 이동하며, 왼쪽에는 항상 0이 추가되고, 오른쪽으로 벗어나는 비트는 버려진다.
Right Shift 연산자와 차이점은 부호가 없다는 점이다.
-51 >>> 3 = 25
>>> 3 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
= | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
Right Shift 연산자 와 Unsigned Right Shift 연산자 의 차이점
논리 오른쪽 시프트 연산은 부호를 고려하지 않고 오른쪽으로 이동하며, 양수와 음수에 모두 적용될 수 있다.
이 연산자는 자바와 같은 몇몇 프로그래밍 언어에서 사용되며, 주로 부호 없는 정수(unsigned integer)의 논리 연산에 활용된다.
'개발 > 개념 및 기법' 카테고리의 다른 글
Java에서 try~catch문, 남용하면 문제 없을까? (0) | 2024.07.30 |
---|---|
참조 (1) | 2023.02.24 |
Interface(인터페이스) (0) | 2021.07.26 |
객체지향 프로그래밍 - 01. 추상화 (0) | 2021.07.26 |