1. 비트 연산이란?
비트 연산(Bitwise Operation)은 숫자를 이진수(0과 1)로 바꾼 뒤, 각 비트 단위로 계산을 수행하는 연산이다.
비트 연산은 다른 연산에 비해 빠르고 메모리 사용이 적다. MySQL에서도 이러한 비트 연산을 사용할 수 있다. MySQL은 비트 연산을 지원하여 데이터베이스 내에서 효율적인 데이터 조작이 가능하다.
| 연산자 | 의미 | 설명 |
| & | 비트 AND 연산 | 두 자리가 모두 1이면 1, 아니면 0 |
| | | 비트 OR 연산 | 두 자리 중 하나만 1이어도 1, 아니면 0 |
| ^ | 비트 XOR 연산 | 두 자리의 값이 다르면 1, 같으면 0 |
| ~ | 비트 NOT 연산 | 1은 0으로, 0은 1로 반전 |
| << | 왼쪽 Shift 연산 | 지정된 갯수만큼 모든 비트를 왼쪽으로 이동 |
| >> | 오른쪽 Shift 연산 | 지정된 갯수만큼 모든 비트를 오른쪽으로 이동 |

💡비트(bit)란?
비트(bit)는 컴퓨터가 정보를 표현하는 가장 작은 단위.
딱 두 가지 값만 가질 수 있음 👉 0 또는 1
1비트로 표현할 수 있는 숫자 개수: 2개 → 0, 1
2비트로 표현할 수 있는 숫자 개수: 4개 → 00, 01, 10, 11
3비트로 표현할 수 있는 숫자 개수: 8개 → 000, 001, 010, 011, 100, 101, 110, 111
...
8비트로 표현할 수 있는 숫자 개수: 256개 (=1byte)
2. MySQL Bit Functions and Operators
2-1. 비트 연산


<예시>
DATA:
| num |
| 8 |
| 15 |
| 1 |
| 13 |
SELECT num
, num & 8
, num & 4
, num & 2
, num & 1
OUTPUT:
| num | num&8 | num&4 | num&2 | num&1 |
| 8 | 8 | 0 | 0 | 0 |
| 15 | 8 | 4 | 2 | 1 |
| 1 | 0 | 0 | 0 | 1 |
| 13 | 8 | 4 | 0 | 1 |
(1) num&8 연산과정
| num | num의 이진수 | 8의 이진수 | & 연산 |
| 8 | 1000 | 1000 | 1000 ⇒ 8 |
| 15 | 1111 | 1000 | 1000 ⇒ 8 |
| 1 | 0001 | 1000 | 0000 ⇒ 0 |
| 13 | 1101 | 1000 | 1000 ⇒ 8 |
(2) num&4 연산과정
| num | num의 이진수 | 4의 이진수 | & 연산 |
| 8 | 1000 | 0100 | 0000 ⇒ 0 |
| 15 | 1111 | 0100 | 0100 ⇒ 4 |
| 1 | 0001 | 0100 | 0000 ⇒ 0 |
| 13 | 1101 | 0100 | 0100 ⇒ 4 |
(3) num&2 연산과정
| num | num의 이진수 | 2의 이진수 | & 연산 |
| 8 | 1000 | 0010 | 0000 ⇒ 0 |
| 15 | 1111 | 0010 | 0010 ⇒ 2 |
| 1 | 0001 | 0010 | 0000 ⇒ 0 |
| 13 | 1101 | 0010 | 0000 ⇒ 0 |
(4) num&1 연산과정
| num | num의 이진수 | 1의 이진수 | & 연산 |
| 8 | 1000 | 0001 | 0000 ⇒ 0 |
| 15 | 1111 | 0001 | 0001 ⇒ 1 |
| 1 | 0001 | 0001 | 0001 ⇒ 1 |
| 13 | 1101 | 0001 | 0001 ⇒ 1 |
2-2. 비트 관련 다양한 함수
CONV( ) : 다른 숫자 시스템으로 변환해주는 함수
*이때 반환하는 데이터는 문자열(string)
SELECT CONV(number, from_base, to_base)
-- Example
SELECT CONV(8, 10, 2) -- OUTPUT: '1000'
SELECT CONV(15, 10, 2) -- OUTPUT: '1111'
SELECT CONV(1, 10, 2) -- OUTPUT: '1'
SELECT CONV(13, 10, 2) -- OUTPUT: '1101'
BIN( ) : 숫자를 이진법으로 변환해주는 함수
*이때 반환하는 데이터는 문자열(string)
SELECT BIN(8)
-- OUTPUT: '1000'
BIT_LENGTH( ) : 문자열이 차지하는 바이트 크기를 비트 수로 변환해주는 함수
SELECT BIT_LENGTH('text')
-- OUTPUT: 32
[참고 자료]
● 비트연산 설명
https://velog.io/@jdja2004/%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90-bitwise-operator
https://www.tcpschool.com/c/c_refer_bitCalculation
● MySQL Documentation > Bit Functions and Operators
https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html
● MySQL Documentation > Aggregate Functions
https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html
● MySQL Documentation > Mathematical Functions (CONV 함수)
https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_conv
● MySQL Documentation > String Functions and Operators (BIN 함수, BIT_STRENGTH 함수)
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_bin
'데이터 처리 도구 > SQL' 카테고리의 다른 글
| [MySQL] 윈도우 함수(Window Functions) - 3. N번째 행의 값 구하기 (0) | 2022.09.15 |
|---|---|
| [MySQL] 집합 연산(1): UNION, UNION ALL 사용하여 조회 결과 결합하기 (0) | 2022.09.07 |
| [MySQL] 날짜/시간 다루기 (2) 연산하기 (0) | 2022.08.30 |
| [MySQL] 윈도우 함수(Window Functions) - 1 (0) | 2022.08.29 |
| [MySQL] JOIN (0) | 2022.08.28 |