a = 60, b = 13 이라고 하자.
두 수를 이진수로 변환하면 다음과 같다.
a = 0011 1100
b = 000 1101
이 두 수를 사용한 예와 함께 아래의 비트연산자를 이해해보자.
연산자 | 역할 | a, b를 사용한 예 |
& | AND 연산. 두 수 모두에서 1인 자리만 1로 판단한다. | a & b = 12 a와 b에서 모두 1인 자리만 1로 표시하면 0000 1100이다. 0000 1100를 십진수로 변환한 12가 결과값으로 도출된다. |
| | OR 연산. 두 수 중 하나에서라도 1인 자리를 모두 1로 판단한다. | a | b = 61 a와 b 중 하나에서라도 1인 자리를 모두 1로 표시하면 0011 1101이다. 0011 1101을 십진수로 변환한 61이 결과값으로 도출된다. |
^ | XOR 연산. 두 수 중 하나에서만 1인 자리를 모두 1로 판단한다. | a ^ b = 49 a와 b 중 하나에서만 1인 자리를 1로 표시하면 0011 0001이다. 0011 0001을 십진수로 변환한 49가 결과값으로 도출된다. |
~ | NOT 연산. 1을 0으로, 0을 1로 바꾼다. | ~a = -61 a = 0011 1100 이므로 ~a = 1100 0011 이다. 이 수를 십진수로 변환한(2의 보수 표기) -61이 결과값으로 도출된다. *2의 보수로 표기된 음수의 값 구하는 법: 0을 1로, 1을 0으로 바꾼 수에 1을 더한 뒤 -1을 곱한다. |
<< | LEFT SHIFT 연산. 모든 자리의 수를 왼쪽으로 옮긴 뒤, 오른쪽에 생긴 빈자리를 0으로 채운다. | a << 1 = 120 0011 1100 을 1번 LEFT SHIFT하면 0111 1000 이다. a << 2 = 240 0011 1100 을 2번 LEFT SHIFT하면 1111 0000 이다. |
>> | RIGHT SHIFT 연산. 모든 자리의 수를 오른쪽으로 옮긴 뒤, 왼쪽에 생긴 빈자리는 가장 왼쪽의 수와 같은 것으로 채운다. | a >> 1 = 30 0011 1100 을 1번 RIGHT SHIFT하면 0001 1110 이다. a >> 2 = 15 0011 1100 을 2번 RIGHT SHIFT하면 0000 1111 이다. |
비트 연산자(bitwise operator), 프로그래머스 문제로 이해해 보자.
📌비트 연산자란? SQL 기초 문법만 배운 상태에서 프로그래머스 SQL 고득점 Kit를 풀던 중 처음 보는 연산자를 발견했다. 평소 &(AND)라고 불리는 기호인데, SQL에서는 AND 연산에 사용되고, '비트 연
velog.io